Вы здесь

Как передать параметр для Rules при программном создании задания через RulesScheduler ?

0

Добрый день.

Есть некая функция, которую нужно выполнить через какое-то время.

function my_function($text){
drupal_set_message($text);
}

Я пытаюсь это сделать, программно создав rules, выполняющее php-код, и программно ставя его в очередь RulesScheduler.

Пытаюсь сделать таким образом:

   $state = new RulesState();
   $state->addVariable('code', 'my_function("Some text");', []);

    $now = new DateTime();
    $task = [
        'identifier' => $now->getTimestamp(),
        'date' => $now->getTimestamp()+60,
        'config' => 'my_rule',
        'data' => $state,
    ];

    rules_scheduler_schedule_task($task);

Задание в Scheduler создается, но при выполнении происходит ошибка.

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

Подскажите, пожалуйста, как это можно реализовать ?

Версия Drupal: 
7.x
Связанные проекты: 
Rules
Вопрос задан 18.11.2017 - 18:38
$state->addVariable('code', 'my_function("Some text");', []);

Роман, это что-то очень страшное, я думаю имя функции и переменные лучше передавать отдельно, а не строкой.

('my_function', "Some text", $arg2, $arg3);
('my_function', ["Some text", $arg2, $arg3]);

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

Комментарий оставлен 24.11.2017 - 15:53

Мне уже удалось решить эту задачу.
Там, как оказалось, нужно создавать не правило, а компонент.
Ну и код для добавления задачи в расписание несколько иной.
http://dru.io/question/8844

Комментарий оставлен 24.11.2017 - 20:31

Ответы