9.10.1. Drupal Fields API. Field Widget: campi di input dei dati, modulo per il campo.
In questo tutorial vedremo come funziona il Field Widget del modulo Link. Questo è un articolo di revisione, quindi se vuoi iniziare a scrivere il tuo Field Widget, passa agli articoli seguenti.
Nell'ultima lezione abbiamo aggiunto campi Link per nodi e blocchi. Ora vediamo come viene creato il modulo per il campo Link.
Abbiamo già visto come funziona l'autoloading delle classi PHP in Drupal, e c'è anche una classe WidgetBase per i widget dei campi:
core/lib/Drupal/Core/Field/WidgetBase.php
Creando una nuova classe figlia nel modulo e mettendola in src/Plugin/Field/FieldWidget
, la classe si collegherà automaticamente e potrà essere utilizzata per il campo. Vediamo la classe del widget per il campo Link:
core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
L'annotazione della classe contiene il tipo di campo a cui può essere applicato questo widget:
/**
* Implementazione del plugin per il widget 'link'.
*
* @FieldWidget(
* id = "link_default",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
In questo modo puoi aggiungere nuovi widget di campo al modulo personalizzato per campi esistenti.
Passiamo ora al metodo formElement(), che è probabilmente uno dei metodi principali del widget, dove gli elementi del modulo vengono aggiunti tramite la Form API. Ci sono tre elementi nel widget Link:
$element['title']
$element['uri']
$element['attributes']
Questi campi verranno poi utilizzati per inserire i dati in un modulo di nodo o blocco. Viene anche aggiunta la validazione ai campi, perché, ad esempio, il campo URI deve contenere un URL corretto o un indirizzo del sito locale.
Inoltre, uno dei metodi importanti è settingsForm(), che è responsabile del modulo di personalizzazione che puoi vedere nella pagina di gestione del modulo:
Tutti gli altri metodi nel Field Widget sono opzionali. Non entreremo nei dettagli di ciascuno dei metodi perché non sono necessariamente utilizzati per scrivere moduli personalizzati. Se scriverai moduli contribuiti, penso che non troverai difficile leggere la descrizione dei metodi della classe genitore:
core/lib/Drupal/Core/Field/WidgetBase.php
Tutti i Field Widget per i campi sono configurati nella scheda Gestisci visualizzazione modulo per ciascun tipo di entità separatamente: