Drupal è un sistema estremamente modulare, i moduli sono davvero moltissimi e capita talvolta di creare installazioni con decine di essi. Ma questi moduli, in che ordine vengono richiamati?
Supponiamo di voler modificare una form rimuovendo un campo. Creiamo un modulo di nome remove_pig_weight, aggiungiamo il canonico remove_pig_weight.info al suo interno e l'altrettanto canonico remove_pig_weight.module.
All'interno del file remove_pig_weight.module creiamo un hook_form_alter, in cui mettiamo il seguente snippet:
function remove_pig_weight_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'pig_node_form':
// Se hai devel installato
dpm($form);
// Se non hai devel installato
// echo "<pre>".print_r(,1)."</pre>";
break;
}
}
Printando l'array che contiene le specifiche della form potremmo notare che proprio il campo che vogliamo eliminare non viene mostrato. Come è possibile? Semplice, ciò accade perchè il campo che vogliamo eliminare viene aggiunto da un modulo che è eseguito dopo il nostro.
Per ovviare a questo comune problema esistono molteplici strade, eccone due davvero semplici per Drupal 6:
Modulo Utility, permette di definire un peso ai moduli, specificandone così l'ordine di esecuzione direttamente nella pagina con la lista dei moduli installati.
Modulo Late Form Alter, permette di eseguire una determinata operazione solo dopo il termine di tutti gli hook_form_alter.
La gestione del peso dei moduli viene definita nella tabella system della vostra installazione di Drupal. A peso minore corrisponde priorità di esecuzione.