Ad esempio se l'entità è un nodo che si chiama $node
ed il campo si chiama $field_name
, il valore del campo si può estrarre nel seguente modo:
$value = $node->field_name['und'][0]['safe_value']
In molti casi questo metodo è sconsigliabile in quanto può richiedere ulteriori accorgimenti che possono compliare la programmazione. Fortunatamente l'API di Drupal, nello specifico Field API, ci viene in aiuto fornendo delle funzioni che gestiscono il caricamento dei campi seguendo le procedure più adeguate e semplificando la programmazione.
Drupal 7: Field API
Field API è la nuova interfaccia di accesso ai dati associati alle entità Drupal e si occupa di gestire in maniera completa tutte le operazioni riguardanti la memorizzazione, il caricamento, la modifica e la visualizzazione dei campi. Ogni entità può usare questa interfaccia per essere estesa e personalizzata.
In questo approfondimento vediamo come usare Field API per caricare e visualizzare i dati contenuti in un campo invece che accedere manualmente alla struttura dell'oggetto entità.
Perché non caricare manualmente il valore di un campo?
Nell'esempio iniziale abbiamo visto un semplice frammento di codice PHP per Drupal 7 che permette di estrarre il valore contenuto in un campo. L'operazione è piuttosto semplice ma in diversi casi si possono nascondere delle controindicazioni. In particolare quando il campo è disponibile in più lingue la stringa 'und'
deve essere gestita opportunamente. Allo stesso modo bisogna introdurre del codice ulteriore per gestire i campi con più valori. Questi due sono i casi più comuni che possono complicare il codice proposto inizialmente.
Come usare Field API per caricare il valore di un campo?
Il procedimento più corretto per caricare il valore di un campo è usare la funzione:
field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL)
Questa funzione restituisce il valore del campo opportunamente formattato secondo le configurazioni prestabilite.
I parametri in ingresso sono:
- Il tipo di entità che si sta caricando.
- L'instanza dell'oggetto entità in questione.
- Il nome del campo da visualizzare.
- (opzionale) Il nome di una modalità di visualizzazione oppure, in alternativa, un vettore che specifica l'etichetta ed il tipo di formato da usare per il rendering.
- (opzionale) In quale lingua caricare il campo, se omesso verrà visualizzato il valore nella lingua stabilita dal sistema.
Riprendendo l'esempio iniziale il codice sarà:
$value = field_view_field('node',$node,'field_name');
In questo modo possiamo non preoccuparci della gestione di valori multipli, del markup e della lingua, lasciando all'API il compito di occuparsi di ogni aspetto.
L'API di Drupal 7 offre questa e molte altre funzioni di grande aiuto agli sviluppatori che desiderano implementare moduli e temi per Drupal.