Estendere i nodi di Drupal, i campi composti

Estendere i nodi di Drupal, i campi composti

Esistono numerosi moduli Drupal che permettono di estendere la struttura base dei nodi. Il più famoso è il Content Construction Kit (CCK) che, con i suoi plugin, permette di configurare dei campi aggiuntivi di moltissimi tipi. Uno dei punti deboli del sistema è pero la creazione di campi composti.

In rete si trovano diverse soluzioni, alcune specifiche per risolvere determinati problemi, oppure dei workaround, dei trucchi per configurare Drupal in modo da emulare campi multipli. Il supporto per i campi multipli è in programma per la prossima versione stabile di CCK, ma per il momento bisogna un po' arrangiarsi.

Per "campo composto" intendo, ad esempio, un campo che contiene una coppia (nome, valore) la cui cardinalità può essere maggiore di uno e i valori sono assegnati dall'utente che crea/modifica il nodo.

Per risolvere questo problema si può definire un nuovo tipo di campo per estendere CCK attraverso un semplice modulo.

Aspetti principali della programmazione del modulo per Drupal

Abbiamo due passaggi principali, uno per l'input ed uno per l'output dei valori.

Per prima cosa il modulo dovrà utilizzare l'hook_process() per costruire il form contenente i nostri campi. Questa funzione dovrà restituire un oggetto $element con la struttura desiderata.

In secondo luogo si deve definire la funzione che genera l'ouput. Grazie all'hook_theme() si può implementare l'ouput del modulo.

La documentazione relativa all'estensione di CCK non è molto chiara. È decisamente più semplice prendere spunto da semplici moduli esistenti per trovare la struttura completa di un modulo che ne estende le funzionalità.

Come aggiungere campi composti a Drupal

Dopo aver realizzato il modulo per aggiungere campi composti in Drupal, ho scoperto che ovviamente non sono stato l'unico a trovare questa soluzione e che di recente è anche stato reso disponibile un modulo. Questo, a parte qualche piccola differenza, è uguale al mio ed è disponibile da poco. Perlomeno ho avuto la mia piccola soddisfazione.