Планирование задания
Компонент можно использовать для планирования запуска задачи, но планировщик в первую очередь предназначался для использования в качестве инструмента для разработчиков, предоставляя своего рода простую очередь сообщений, которая позволяет вам асинхронно обрабатывать материал.
Программное планирование задачи для запуска в определенный момент очень просто и сводится всего к паре строк кода. Вот пример:
<?php
// Load the Scheduler service class
$path = $modx->getOption('scheduler.core_path', null, $modx->getOption('core_path') . 'components/scheduler/');
$scheduler = $modx->getService('scheduler', 'Scheduler', $path . 'model/scheduler/');
if (!($scheduler instanceof Scheduler)) {
return 'Oops, could not get Scheduler service.';
}
/**
* Get the task with reference "dosomething" in the "mycmp" namespace.
* This task should have been added earlier via a build or the component.
*/
$task = $scheduler->getTask('mycmp', 'dosomething');
if ($task instanceof sTask) {
// Schedule a run in 10 minutes from now
// We're passing along an array of data; in this case a client ID.
$task->schedule('+10 minutes', array(
'client' => 15
));
}
Все, что вам нужно сделать, чтобы запланировать выполнение задачи, — это указать время (либо метку времени UNIX, либо время в будущем, например, +10 минут
или +14 дней
) и необязательный массив данных. Он создаст новый объект sTaskRun
, который будет выполняться заданием планировщика cron, которое вы настроили ранее, когда пройдет время. Начиная с Scheduler 1.1, $task->schedule()
возвращает новый объект запуска задачи.
Чтобы создать объект sTask
, вам может понадобиться немного больше кода, но вам нужно сделать это только один раз, предпочтительно в скрипте сборки или начальной загрузки. Объект задачи содержит сведения о том, что запускать (файл, фрагмент или процессор), пространство имен и ссылку.