Использование пакетного 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(), после чего больше ничего не происходит.

Author: Dinesh Patil, 2015-09-06

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 не имеют инкрементной операции.

 4
Author: Leolando Tan, 2015-09-06 12:32:09