web-dev-qa-db-ja.com

完成した関数にデータを渡すバッチAPI

バッチインポートを作成していますが、完成した関数に2つの異なるカウントを渡したいのですが。たとえば、「操作」関数で、NIDが存在するかどうかを確認し、ノードを作成しない場合はノードを更新します。

私の「終了した」関数では、次のようなことをしたいです:

 batch_import_finished($success, $results, $operations) {
   if ($success) {
     $message ='Nodes created: '.$nodesCreated. '<br />';
     $message .='Nodes updated: '.$nodesUpdated;
   }
   else {
     $message = 'some errors';
   }

  drupal_set_message($message);
}

これが理にかなっているといいのですが。

6
Brian

まず、バッチプロセスで終了したプロセスを設定していることを確認します。

_$batch = array(
      'title' => t('Merging content ...'),
      'operations' => array(
         array('batch_import_import', array($col1, $col2),  //Note we pass 2 variables here.
       ),
      'finished' => 'batch_import_finished', // set this!
      'init_message' => t('Connectng to the base site ...'),
      'progress_message' => t('Processed @current out of @total.'),
      'error_message' => t('An error occurred during processing'),
      'progressive' => FALSE
    );
...
batch_set('admin/content');
_

次に、ワーカー関数で、渡された最後の引数を$ contextとして取得できます。

たとえば、上記の例の場合、ワーカー関数は次のようになります。

_function batch_import_import($col1, $col2, &$context) {
  //do the stuff.
  if (!isset($context['results']['created'], $context['results']['updated'])) {
    $context['results']['created'] = 0;
    $context['results']['updated'] = 0;
  }
  $context['results']['created']++; // is_new == TRUE or some logic.
  $context['results']['updated']++; // add some logic to determine created or updated.
}
_

次に、finish関数で、2番目の引数として_$context['results']_を取得します。

_batch_import_finished($success, $results, $operations) {
   if ($success) {
     $message = t('Nodes created: @count', array('@count' => $results['created'])).'<br />';
     $message .= t('Nodes updated: @count', array('@count' => $results['updated']));
   }
   else {
     $message = t('some errors');
   }

  drupal_set_message($message);
}
_

ここでt()関数を使用できるので、$ messageも修正しました。参照により_$context_を渡すことに注意してください。詳細については、batch_apiの例を参照してください。これは、先日開発していたモジュールからコピーしたコードの一部です。

完成した関数では、_$operations_に未処理のアイテムが含まれています。

12
AyeshK