Drupal Batch Forms - Значения процесса? - PullRequest
1 голос
/ 19 ноября 2011

Есть ли способ заставить форму отправлять значения формы в пакетный процесс и использовать их при каждой пакетной операции?

1 Ответ

2 голосов
/ 19 ноября 2011

Да, вы можете просто передать их функции, которая объявляет пакет, и оттуда передать их каждой операции:

function mymodule_myform_submit(&$form, &$form_state) {
  $var1 = $form_state['values']['var1'];
  $var2 = $form_state['values']['var2'];
  batch_set(mymodule_mybatch($var1, $var2));
}

function mymodule_mybatch($var1, $var2) {
  $nid = db_result(db_query_range("SELECT nid FROM {node} ORDER BY nid ASC", 0, 1));

  $operations = array();
  for ($i = 0; $i < 100; $i++) {
    $operations[] = array('mymodule_mybatch_op', array($nid, $var1, $var2));
  }
  $batch = array(
    'operations' => $operations,
    'finished' => 'mymodule_mybatch_finished',
  );
  return $batch;
}

function mymodule_mybatch_op($nid, $var1, $var2) {
  // Perform the operation
}

function mymodule_mybatch_finished($success, $results, $operations) {
  if ($success) {
    $message = count($results) . ' processed.';
  }
  else {
    $error_operation = reset($operations);
    $message = 'An error occurred while processing ' . $error_operation[0] . ' with arguments :' . print_r($error_operation[0], TRUE);
  }
  drupal_set_message($message);
}

Очевидно, вам нужно изменить источник данных в mymodule_mybatch в соответствии с вашими потребностями:)

...