Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Пример класса, который использует механизм степпера
- // для выполнения большого списка операций,
- // требующего разбиения на шаги
- // https://t.me/bitrixoid_iz_kolhoza/370
- namespace AlexeyGfi\CatalogHelpers;
- use Bitrix\Main\Config\Option;
- use Bitrix\Main\Update\Stepper;
- class CacheWarmingUpStepper extends Stepper
- {
- public static $iblockId = 69;
- // !!! Нужно указывать реально установленный модуль
- // Потому что агент будет пробовать подключить этот модуль
- // и если его нет - не будет выполняться
- protected static $moduleId = 'main';
- protected const STEP_PORTION = 50;
- public static function bindChain()
- {
- $stepperModuleId = static::getModuleId();
- // Если есть опции - значит процесс идёт
- if (!Option::get(
- 'main.stepper.' . $stepperModuleId,
- __CLASS__
- )) {
- Stepper::bindClass(
- __CLASS__,
- self::getModuleId(),
- 0 // Первый шаг выполнится тудже
- );
- }
- }
- public static function getTitle()
- {
- return 'Прогрев кеша галереи товаров';
- }
- public function execute(array &$option = []): bool
- {
- // Опция, которая будет пробрасываться дальше
- // Например, используется в запросе для ->setOffset
- $option['skip'] = $option['skip'] ?? 0;
- $processed = 0;
- // Готовим и обрабатываем порцию текущего шага
- // ...
- $processed++;
- // ...
- if (!$processed) {
- // Говорим, что процесс завершён
- return self::FINISH_EXECUTION;
- }
- // Увеличиваем счётчик пропускаемых элементов
- $option['skip'] += self::STEP_PORTION;
- // Уходим на следующий шаг
- return self::CONTINUE_EXECUTION;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement