Le traitement par lots (Batch processing en anglais) est souvent un aspect important de tout projet Drupal et plus encore, lorsque nous devons traiter de grands volumes de données.
L'un des avantages principaux du traitement par lots réside dans le fait de pouvoir traiter un nombre important de données par petites étapes (chunk) qui se traduisent chacune par une requête indépendante au lieu d'une seule grosse requête pour traiter toutes les données à la fois. Cela nous permet de réaliser un traitement de masse sans devoir utiliser toutes les ressources de mémoire disponibles de notre serveur.
Le fait de diviser un traitement en petits morceaux, peut servir à éviter le temps allouer à l'exécution de nos scripts PHP sans que ça soit atteint, tout en informant nos utilisateurs sur l'avancée de notre traitement.
Pour cet exemple on va créer un module pour supprimer les taxonomies dupliquées, voici la structure du module:
Sur la partie taxonomie, on a un vocabulaire Catégories qui contient des termes dupliqués qu’on souhaite supprimer.
On a créer un formulaire pour pouvoir choisir le vocabulaire dont on souhaite supprimer les duplications.
Après le choix du vocabulaire on clique sur le bouton Delete duplicated terms, le batch s'exécute pour supprimer les taxonomies dupliqués.
Et on obtient la liste suivante des termes non dupliqués :
Voici le code source du fichier BatchForm.php