Inserire la tassonomia in un form

Sto realizzando il nuovo sito di un cliente e tra le tante cose fa fare c'è la gestione di una richiesta del cliente, che non vi posso dire. Per riuscire a realizzare questa cosa ho deciso di averlermi, tra le altre cose, della tassonomia di Drupal. Ma come è possibile inserire in un form creato da 0 la parte relativa alla tassonomia che dovrà essere sotto forma di "select" ?

La prima cosa che mi è venuta in mente è quella di andare a controllare se tra le funzioni dedicate alla tassonomia che Drupal mette a disposizione era presente qualche cosa che mi potesse aiutare. Trovata: taxonomy_get_tree(). Questa funzione prende come primo parametro (su un totale di 4) il vocabolary id (il genitore per intenderci) del mio albero della tassonomia e ritorna un array a chiave numerica dove ogni elemento è formato da 7 campi. In questi campi quello che mi interessa è parents, un array che lega due elementi della tassonomia.  A questo punto per creare la mia "select" devo solamente analizzare uno ad uno gli elementi dell'array ritornato dalla funzione taxonomy_get_tree() e creare la select.

Ma posso dire una cosa? Non sta diventando un po' troppo complicato ? E' possibile che tutti gli altri moduli facciano così ? La risposta è no: basta cercare nel posto giusto, e si chiama "taxonomy.module". Seguite il mio ragionamento: sappiamo che la tassonomia puo' essere legata ad un tipo di contenuto (nodo), ma è un condizionale, quindi non è detto che sia sempre presente. Questo ci porta a pensare che nel modulo della tassonomia debba essere presente una funzione che altera il form di inserimento di un nuovo nodo ed infatti è presente la funzione "taxonomy_form_alter". Analizzandola un po' (non è semplicissima, ma neppure complicata) si arriva ad una riga dove viene richiamata una fantomatica taxonomy_form il cui commento è "Generate a form element for selecting terms from a vocabulary." Bingo. Ecco qui la nostra funzione. Gia' bella e pronta per l'uso.  Una occhiata al codice sorgente per capire cosa sono e a cosa servono i quattro parametri di input :

  • $vid: è il vocabolary id del nostro vocabolario
  • $value: è l'idetificativo del termine selezionato precedentemente (ricordiamoci che questa funzione puo' essere utilizzata anche nel caso di un form di modifica)
  • $help: è il testo di aiuto
  • $name: ignorate questo valore (nella documentazione ufficiale viene descritto come "ignored").

A questo punto non ci rimane che scrivere una semplicissima riga PHP per avere il nostro codice gia' pronto:

$form['taxo'] = taxonomy_form(VOCABOLARY_TYPE_MACHINE,0,'Tipo dato per blog ziodrupal');

Altro che andare di foreach() e controlli incrociati sugli elementi "parents"... Basta cercare e Drupal ci mette il resto.