Приветствую,
Суть проблемы: необходимо запускать процесс обновления товаров на сайте по прайслистами поставщика.
Делаю все это в Queue процессе вызываемого по Cron.
{
$items = mymodule_get_info_db();
if ($items) {
$queue = DrupalQueue::get('collections');
$queue->createQueue();
foreach ($items as $item) {
$queue->createItem($item);
}
}
//Если написать что-то сюда
//то это будет выполнятся
//до запуска $queue - а надо после
}
function mymodule_cron_queue_info()
{
$queue['collections'] = array(
'worker callback' => 'mymodule_process_file_run',
'time' => 60,
);
return $queue;
}
function mymodule_process_file_run($item)
{
...
}
Только не понятно - как сделать функцию которая будет выполнятся после отработки всех Queue?
Cкажем создать mymodule_process_file_run2 и засунуть ее в очередь $queue ? Чтобы это выполнялось уже после $queue['collections'] ?
Смотрите комментарии в mymodule_cron().
Кто что посоветует?
С ув., Алексей
Комментарии
Мысль навскидку: увеличить вес (weight) своего модуля в таблице system, чтобы его задания попали к конец очереди.
Спасибо,
Но как-то "топорно". Проблема в том, что я даже не могу получить значения очереди $queue.
Писал типа: mymodule_cron_queue_alter и внутри уже него: print_r ($queue) ну что-то ничего не выводится - просто запускается cron и все.
С ув., Алексей
В смысле? О_о
Зачем? Если Вы считаете моё решение специфичным, то очень сильно ошибаетесь. Море модулей выставляют своей вес в *.install так, как им нужно. Например:
<?php
/**
* Implements hook_install().
*/
function block_install() {
db_update('system')
->fields(array('weight' => -5))
->condition('name', 'block')
->execute();
}
?>
Спасибо, за советы, может как нить в другой раз сделаю, как вы рекомендовали. А пока сделал вообще CLI приложение и подключил bootstrap Drupal.
Просто немного изменились вводные задачи. Скрипт при больших объемах данных мог слететь по timeout.
С ув., Алексей