Batch API: Sok feladat elvégzése Drupalban AJAX-szal.

Egy újabb Drupal gyrostipp következik.

Amikor bekapcsolunk egy új nyelvet, vagy verziófrissítés utána, amikor meglátogatjuk az update.php-t, azt láthatjuk, hogy megjelenik egy teljes képernyős AJAX-os állapotjelző sáv, un. „progress bar”. Azért hasznos ez az AJAX-os megoldás, mert ha a feladatok elvégzése 30 másodpercnél tovább tartana, a php szkript futása megszakadhat, és a feladatok elvégzése félúton megállna. Így viszont a Drupal gondoskodik, hogy néhány másodperc futás utána, a háttérben, egy új http lekérés indul, ezzel kiküszöbölve a 30 másodperces kolátot.

Most mogmutatom, hogyan tudunk mi is ilyet készíteni. Drupal-al ez is nagyon egyszerű:

A funkció lelke a Drupal magban a batch.inc-ben van elrejtve, és nekünk mindössze egyetlen függvényt, a batch_set()-et, és annak paraméterezését kell ismernünk. Ez a függvény egyetlen paramétert vár, egy tömböt. A tömbben meg lehet adni a feladatlista nevét, az elvégzendő feladatokat, amelyek php callback függvények és paramétereik, illetve a befejezéskor meghívandó callback függvény.

A példakód ilyen egyszerű:

<?php
  $batch
= array(
   
'title' => t('Helló batch feladatok'),  // a feladatlista címe
   
'operations' => array(),                // feladatok tömbje
   
'finished' => 'hellobatch_finished',    // befejezéskor meghívandó
 
);
 
  for (
$i=0; $i<$form_state['values']['jobs']; $i++) {
   
$operation = array(
     
'hellobatch_job',   // egy feladat callback fg.
     
array($i),          // és paraméterei
   
);
   
$batch['operations'][] = $operation;
  }
 
batch_set($batch);
?>

Ha mindezt egy form_submit függvényben hívjuk meg, nem is kell mást tennünk, azonnal elindul a feladatok elvégzése. Ha form submit-on kívűl akarjuk használni, akkor még a batch_process() függvényre lesz szükségünk.

További infó angulul az API oldalon.

A példamodul kódját csatolttam, próbáljátok ki!

CsatolmányMéret
Package icon hellobatch.zip1.11 KB

7 hozzászólás

kösz

kösz

Nagyon hasznos volt a

Nagyon hasznos volt a leírásod. A segítségével sikerült több mint 400 html fájlban tárolt táblázat adatait adatbázisba áttölteni. Köszönöm.