9.10.2. Drupal Fields API. Field Formatter: visualizzare i dati dei campi sulla pagina
In questo articolo esamineremo i Field Formatter, che ci permettono di modificare la visualizzazione dei campi e di visualizzarli sulla pagina.
Negli articoli precedenti, abbiamo creato il tipo di campo Link, in questo articolo vedremo come questi campi vengono visualizzati sulla pagina e quale classe è responsabile di questo. Ogni campo che aggiungi tramite Drupal può essere visualizzato sulla pagina e ne puoi modificare le impostazioni nella pagina Gestisci visualizzazione.
Nella colonna Formato puoi scegliere come visualizzare il campo. Questa colonna è formata dalle classi Field Formatter. Vediamo la classe del modulo Link, che visualizza il link sulla pagina:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php
L'annotazione della classe mostra a quale tipo di campo appartiene questo formatter.
/**
* Implementazione del plugin per il formatter 'link'.
*
* @FieldFormatter(
* id = "link",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
In questo file, ciò che ci interessa principalmente è il metodo viewElements(), che è responsabile della visualizzazione dei dati sulla pagina. Nota che il formatter non invia richieste al database, prende i dati dalla variabile $items
. I dati renderizzati dall'entità vengono passati a $items
. In questo modo, abbiamo una separazione delle responsabilità delle classi per l'inserimento dei dati Field Widget, la memorizzazione dei dati Field Storage e l'output dei dati Field Formatter. Questo è molto comodo perché puoi memorizzare nella cache i dati a livelli differenti. Ad esempio, se l'output o le impostazioni del Field Formatter sono cambiate, non ha senso svuotare la cache dei nodi, perché i dati non cambiano, ma cambia solo il loro output. È anche comodo per la discussione e l'aggiunta di nuove funzionalità. Se devi solo cambiare l'output, aggiungi un nuovo Field Formatter per il tipo di campo e scrivi il tuo output.
Inoltre, la classe LinkFormatter ha il metodo settingsForm(), che è responsabile della configurazione del formatter nella pagina Gestisci visualizzazione. Tramite la Form API puoi aggiungere i campi di configurazione per il campo e poi memorizzare queste impostazioni nella configurazione.
Il modulo Link ha un altro formatter:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
Questo è ereditato dal normale LinkFormatter, ma con una differenza: per questo formatter viene collegato un template separato:
core/modules/link/templates/link-formatter-link-separate.html.twig
In questo modo, l'HTML per visualizzare il campo viene ottenuto passando attraverso il template. E il formatter forma solo un file $element
, dove attraverso $delta
vengono scritti i dati per ciascuno dei valori del campo multiplo.
Come puoi vedere, la Field API è abbastanza semplice e comoda da usare; nel prossimo articolo scriveremo il nostro tipo di campo con Storage, Widget e Formatter.