вторник, 15 сентября 2015 г.

PHP и Битрикс: Пошаговое выполнение процесса

Насколько нам известно, выполнение любого действия несколько тысяч раз может занимать приличное время.
1. пользователь любит прогресс-бары и счётчики
2. пользователь не любит, когда ничего не происходит
3. пользователь любит возможность остановить происходящее
4. времени на выполнение браузеру может тупо не хватить

Примеры таких задач в битриксе - импорт разнообразных типов, или, как это было у меня - удаление задач в КП по определённому условию. Запускаются такие процессы из браузера по желанию юзверя и должны выполняться, показывая текущий статус обработки.

Оставим оформительскую красоту для дизайнеров и реализуем счётчик и простенький прогресс-бар.

Сначала понимаем, что надо сделать на первом шаге, затем что на втором, и что на шаге n-1 и n. Находим точку повторения и точку окончания. Итого:

  1. на странице есть кнопка запуска, информационный блок со статистикой и js-обработчики: запуска процесса и обработки результата
  2. по клику на кнопке передаём номер шага (и/или другие необходимые параметры)
  3. ajax-приёмник обрабатывает шаг, формирует json с необходимой информацией для статуса и возвращает его вызывающей функции.
  4. функция обработки результата парсит инфу, выводит статус, решает, надо ли запускать следующий шаг и, соответственно, запускает следующий шаг или заканчивает работу процесса


Прогресс бар реализую с помощью тега progress. Управлять им очень просто:
* максимальное значение задаётся атрибутом max
* текущее значение задаётся атрибутом value
* можно управлять внешним видом с помощью стилей
* минус у него один - это HTML5 и не всеми он поддерживается. Но я показываю его для примера, так что можете реализовать прогресс-бар по старинке - на дивах =)

Json легко парсит функция JSON.parse, превращающая его в объект, с которым уже можно работать дальше.


Пошаговая заготовка из статьи

Дока по тегу progress
Дока по объекту JSON
И ещё про JSON для тех, кому совсем интересно