xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Если нужно выполнить последовательно два 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
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании