Здравствуйте. Столкнулся с проблемой. Тупо не могу найти ошибку в своем коде.
Проблема такова. Модуль обрабатывает данные с помощью Batch API. Но цикл выполняется 1 раз.
Вот собственно код
<?php
$batch = array(
'title' => t('Groups batch processing'),
'operations' => array(
array('ts_import_bg'),
),
'file' => drupal_get_path('module', 'ts_import') . '/ts_import.batch.inc',
);
batch_set($batch);
batch_process();
?>
И код в файле ts_import.batch.inc
значения переменных указал коментами в коде. Цифры проверены при выполнении с помощью dsm
<?php
function ts_import_bg(&$context) {
$limit = 10;
if (empty($context['sandbox']['current'])) {
$context['sandbox']['current'] = 0;
$context['sandbox']['max'] = ts_import_is_groups(); # 722
}
if (empty($context['sandbox']['progress'])) {
$context['sandbox']['progress'] = 0;
}
$groups = ts_import_get_group($limit);
foreach ($groups as $group) {
if ($group->parent == 'NO') {
$group->parent = ts_import_select_ref($group->code);
}
if ($group->parent === FALSE) {
$parent = 0;
} else {
$parent = $group->parent;
}
ts_import_tax($group->code, $group->name, $parent);
ts_import_del($group->id);
$context['sandbox']['current']++;
$context['sandbox']['progress']++;
}
$context['message'] = t('Updating groups from queue: ') . t('Total: %total. Curent element is %current', array(
'%current' => $context['sandbox']['current'],
'%total' => $context['sandbox']['max'])
);
$context['results']['processed'] = $context['sandbox']['progress']; # 10
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; # 0.013850415512465
}
}
?>
Сообщение которое выводил в $context['message'] - не выводится.
P.S. В этом же модуле есть и другие пакетные операции, которые выполняются без проблем.
Заранее благодарю.
Комментарии
в operations в качестве параметров к callback функции ts_import_bg нужно разложить все задания - сейчас она запрограммирована на 1 запуск
http://drupal.org/node/180528
http://www.varvashenia.ru/cms/drupal/write_modules/cron_queue_batch_api/
не обязательно все, но спасибо, подсказали куда смотреть, я пропустил второй параметр.
В итоге все заработало после изменения кода
<?php
$batch = array(
'title' => t('Groups batch processing'),
'operations' => array(
array('ts_import_bg',array()),
),
'file' => drupal_get_path('module', 'ts_import') . '/ts_import.batch.inc',
);
?>
Насчет разложить все задания - не лучшая идея передавать массив из 100к позиций. Уж слишком грузится оперативка.
Считывание происходит в обработчике, а контролировать количество запусков можно с помощью переменной $context['finished'];
Еще рас спасибо!
спасибо за идею - сейчас буду использовать