• EdgarPE: "When did spazzing out qualify as a dance? Kneeling, like I want to throw up. What the effing crap? That angel guy just felt me up." #epic

  • EdgarPE: A hét lezárásaként tökéletes lesz ez a vid: http://www.youtube.com/watch?v=lj-x9ygQEGA Kell egy kis idő hogy ráhangolódj :) RT ha tetszett.

  • EdgarPE: Felhívtam a HRP-t egy apróság miatt és kértem a Dell szervizt. Erre kapcsolták a Dell üzletág vezetőt :) Viszont jó fej volt, segített.

ajax

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!