Использование пакетного api без формы
У меня есть страница, которая использует api формы. Когда я перехожу на эту страницу через hook_menu, я хочу запустить пакетный скрипт.
Я посмотрел на модуль пакетного примера и пришел к следующему:
Код моей страницы
...
batch_set(my_batch());
die(); // removing this has no affect
...
Остальная часть кода
function my_batch() {
$max = 10000;
$increment = 1000;
drupal_set_message(t('Creating batch'));
$operations = array();
for ($i = 0; $i < $max; $i = $i + $increment) {
$operations[] = array(
'batch_example_op_1',
array(
$i,
$increment
),
);
}
$batch = array(
'operations' => $operations,
'finished' => 'batch_example_finished',
);
return $batch;
}
/**
* Batch operation for batch 1: load a node.
*
* This is the function that is called on each operation in batch 1.
*/
function batch_example_op_1($count, $increment) {
drupal_set_message('Count is : ' . $count);
$context['results'][] = time();
}
function batch_example_finished($success, $results, $operations) {
if ($success) {
drupal_set_message('All done');
}
else {
drupal_set_message('Error');
}
}
В настоящее время массив $operations
создается и передается в batch_set()
, после чего больше ничего не происходит.
1 answers
Основываясь на первом примере кода, найденном на странице пакетного API Drupal, он гласит:
Если эта функция была вызвана из обработчика отправки формы, остановитесь здесь, FAPI будет обрабатывать вызов функции batch_process(). Если не вызывается из обработчика отправки , добавьте следующее, указав URL-адрес, на который пользователь должен быть отправлен после завершения пакета.
И что нам нужно добавить batch_process('node/1');
(все еще основанный на примере кода). Поэтому вам просто нужно добавить эту строку кода с путь Drupal, по которому вы хотите перенаправить пользователя после пакетного процесса после строки batch_set()
.
Строка die()
также больше не нужна, основываясь на примере кода. Я также протестировал ваш код на своем локальном сайте D7 с добавлением batch_process().
Несвязанное Обновление
В вашем объявлении цикла for for ($i = 0; $i < $max; $i = $i + $increment)
я заметил, что раздел "запоздалая мысль" не увеличивает цикл, потому что переменные $i
и $increment
не имеют инкрементной операции.