Skip to content
  1. Компоненты
  2. Scheduler
  3. Планирование задания

Планирование задания

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

Программное планирование задачи для запуска в определенный момент очень просто и сводится всего к паре строк кода. Вот пример:

php
<?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, вам может понадобиться немного больше кода, но вам нужно сделать это только один раз, предпочтительно в скрипте сборки или начальной загрузки. Объект задачи содержит сведения о том, что запускать (файл, фрагмент или процессор), пространство имен и ссылку.