Какая логика у функции прогресса fn_set_progress?
Пример, есть цикл, обработка файла 4000 позиций.
Перед циклом
fn_set_progress(‘echo’, “Загружено предложений: 0”);
В начале цикла
$count_offers++; //подсчет
fn_set_progress(‘parts’, $count_offers);
fn_set_progress(‘title’, “Обработка файла”);
В конце цикла
fn_set_progress(‘echo’, __(‘Загружено предложений’) ." ". $count_offers);
fn_set_progress(‘step_scale’, $count_offers);
Прогресс в обработке сразу смещается в право, и там стоит до финала.
http://joxi.ru/DrlBDbqtvbZ3X2
То есть, нет самого процесса плавного движения ползунка.
Сами себе ответим)
Строку fn_set_progress(‘step_scale’, $count_offers); Необходимо поставить перед циклом.
Где $count_offers Общее количество элементов в цикле.
$count_offers = count($array_offers);
fn_set_progress(‘step_scale’, $count_offers);
foreach($array_offers as $offer){
fn_set_progress(‘title’, “Обработка файла”);
...
fn_set_progress(‘echo’, __(‘Загружено предложений’) ." ". $count_offers);
}
3 лайка
fn_set_progress только по ajax работает? При генерации страницы его можно как-то показать? У меня вывод всех сообщений делается просто на белом фоне…
Или что-то нужно дополнительно подключить?
Да, работает только с аяксом
А есть какая-то возможность добавить в админское меню ajax ссылку, чтобы запрос на контроллер уходил по ajax и выводил мою логику в progress bar?
Просто сейчас я реализовал в menu.post.php обычную ссылку, и контроллер отрабатывает без ajax. Ничего аналогичного (похожего) на мою задачу найти не могу (
Выложите код ссылки и саму функцию.
Код ссылки:
модуль/schemas/menu/menu.post.php
$schema[‘top’][‘addons’][‘items’][‘s_helpers_mod.s_clear_category’] = array(
‘attrs’ => array(
‘class’=>‘is-addon’
),
‘href’ => ‘s_helpers_mod_clear_category.delete_all_products’,
‘position’ => 800,
);
return $schema;
Код контроллера:
модуль/controllers/backend/s_helpers_mod_clear_category.php
if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }
if($mode==‘delete_all_products’){
$s_prod_ids = db_get_fields (“SELECT * FROM cscart_products_categories WHERE category_id = 3476;”);
$s_prod_ids_count = count($s_prod_ids);
fn_set_progress(‘step_scale’, $s_prod_ids_count);
foreach($s_prod_ids as $s_prod_id){
fn_delete_product($s_prod_id);
fn_set_progress(‘echo’, ‘Удалено товаров’ ." ". $s_prod_id);
}
return array(CONTROLLER_STATUS_OK, “categories.manage”);
}
Попробуйте так:
$schema[‘top’][‘addons’][‘items’][‘s_helpers_mod.s_clear_category’] = array(
‘attrs’ => array(
‘class’=>‘is-addon’,
'class_href' => 'cm-ajax cm-comet',
),
‘href’ => ‘s_helpers_mod_clear_category.delete_all_products’,
‘position’ => 800,
);`return $schema;`
Суть в том, чтобы повесить класс ‘cm-ajax cm-comet’ на Вашу ссылку.
В схеме есть подсказка, что можно добавить через class_href, но на тесте не срабатывает…
Если принципиально повесить класс именно на пункт, меню, попробуйте через скрипт добавить.
1 лайк
Еще вот это
fn_set_progress(‘step_scale’, $s_prod_ids_count);
надо поменять на
fn_set_progress('parts', $s_prod_ids_count);
fn_set_progress('step_scale', 1);
1 лайк
Огроменное Вам спасибо!!! Все работает
Еще один момент подскажите плз, как стандартно сделать редирект после ajax запроса? Не хочу писать логику обновления значений в блоках и т.п., думаю сделать проще, редиректить на страницу с данными
return array(CONTROLLER_STATUS_REDIRECT, "categories.manage");
не срабатывает при ajax запросах?
fn_redirect();
Тоже не срабатывает
А если:
Без
return array(CONTROLLER_STATUS_REDIRECT, “categories.manage”);
После функций в контроллере.
fn_redirect(fn_url('categories.manage', 'A'));
exit;
Неа, не срабатывает. Остается на той же странице…
Думал js кастомный подцепить и там переадресацию на js реализовать по событию 'ce.ajaxdone'
Но как свой скрипт подцепить через контроллер, без шаблонов, нигде найти не могу )) Или такое вообще не реально?
Можно попробовать так:
После клика дождаться окончания выполнения ajax, и выполнить переадресацию
$('.my_spec_btn').on('click', function() {
$.ceEvent('on', 'ce.ajaxdone', function(event) {
window.location.replace("https://google.com");
});
});
1 лайк
Шаблон нужен для того, чтобы скрипт вгрузить.
Точнее нужно подключится к хуку
Например design/backend/templates/addons/my_changes/hooks/index/scripts.post.tpl
и там либо сам скрипт, либо ссылку на него(название аддона своё используйте)
1 лайк
SegaWEB:
Огроменное Вам спасибо!!! Все работает
Еще один момент подскажите плз, как стандартно сделать редирект после ajax запроса? Не хочу писать логику обновления значений в блоках и т.п., думаю сделать проще, редиректить на страницу с данными
return array(CONTROLLER_STATUS_REDIRECT, “categories.manage”);
не срабатывает при ajax запросах?
fn_redirect();
Тоже не срабатывает
Вот так
Tygh::$app['ajax']->assign('force_redirection', fn_url('categories.manage'));
exit;
2 лайка
Tygh::$app['ajax']->assign('force_redirection', fn_url('categories.manage'));
exit;
Вот так работает! Огромное спасибо!
1 лайк