Как добавить еще одну фукнцию в queue процесс после выполнения всех действий?

Главные вкладки

Аватар пользователя alexsaab alexsaab 2 декабря 2012 в 20:01

Приветствую,

Суть проблемы: необходимо запускать процесс обновления товаров на сайте по прайслистами поставщика.
Делаю все это в Queue процессе вызываемого по Cron.

function mymodule_cron()
{
    $items = mymodule_get_info_db();

    if ($items) {
        $queue = DrupalQueue::get('collections');
        $queue->createQueue();
        foreach ($items as $item) {
            $queue->createItem($item);
        }
    }

//Если написать что-то сюда
//то это будет выполнятся
//до запуска  $queue - а надо после Smile

}

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().

Кто что посоветует?

С ув., Алексей

Комментарии

Аватар пользователя CSoft CSoft 2 декабря 2012 в 22:10

Мысль навскидку: увеличить вес (weight) своего модуля в таблице system, чтобы его задания попали к конец очереди.

Аватар пользователя alexsaab alexsaab 2 декабря 2012 в 22:44

Спасибо,

Но как-то "топорно". Проблема в том, что я даже не могу получить значения очереди $queue.

Писал типа: mymodule_cron_queue_alter и внутри уже него: print_r ($queue) ну что-то ничего не выводится - просто запускается cron и все.

С ув., Алексей

Аватар пользователя CSoft CSoft 2 декабря 2012 в 23:05

"alexsaab" wrote:
Но как-то "топорно"

В смысле? О_о

"alexsaab" wrote:
Проблема в том, что я даже не могу получить значения очереди $queue.

Зачем? Если Вы считаете моё решение специфичным, то очень сильно ошибаетесь. Море модулей выставляют своей вес в *.install так, как им нужно. Например:

<?php
/**
 * Implements hook_install().
 */
function block_install() {
  
db_update('system')
    ->
fields(array('weight' => -5))
    ->
condition('name''block')
    ->
execute();
}
?>
Аватар пользователя alexsaab alexsaab 3 декабря 2012 в 20:38

Спасибо, за советы, может как нить в другой раз сделаю, как вы рекомендовали. А пока сделал вообще CLI приложение и подключил bootstrap Drupal.

Просто немного изменились вводные задачи. Скрипт при больших объемах данных мог слететь по timeout.

С ув., Алексей