Drupal → Последовательно запустить два Batch-а

27.06.2017

Если нужно выполнить последовательно два Batch-а и операции второго Batch-а не зависят от результатов первого, то достаточно подряд вызвать batch_set(), а если зависят, то:

function mymodule_myform_submit($form, &$form_state) {
  // Создаём операции для первого batch-а
  $operations = array();
  for ($i = 0; $i < 100; $i++) {
    $operations[] = array('mymodule_first_batch_operation', array());
  }

  // В конец добавляем операцию для запуска второго batch-а
  $operations[] = array('mymodule_start_second_batch', array());

  // Запускаем первый batch
  batch_set(array(
    'operations' => $operations,
    ...
  ));
}

function mymodule_first_batch_operation(&$context) {
  ...
  // Сохраняем данные для второго batch-а
  $context['results']['data_for_second_batch'][] = '...';
}

function mymodule_start_second_batch(&$context) {
  // Создаём операции для второго batch-а на основе данных первого
  $operations = array();
  foreach ($context['results']['data_for_second_batch'] as $item) {
    $operations[] = array(...);
  }

  // Запускаем второй batch
  batch_set(array(
    'operations' => $operations,
    ...
  ));
}

Т.е. основная идея — это добавить отдельную операцию для создания и запуска второго batch-a, в которой будут доступны нужные данные из первого.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Однако, будем пробовать. Спасибо!

Добавить комментарий