9.10.1. Drupal Fields API. Field Widget: gegevensinvoervelden, formulier voor het veld.
In deze tutorial bekijken we hoe de Field Widget van de Link-module werkt. Dit is een overzichtsartikel, dus als je wilt beginnen met het schrijven van je eigen Field Widget, sla dan de volgende artikelen over.
In de vorige les hebben we Link-velden toegevoegd voor knooppunten en blokken. Laten we nu kijken naar hoe het formulier voor het Link-veld wordt gevormd.
We hebben al kennisgemaakt met autoloading van PHP-klassen in Drupal, en er is ook een WidgetBase-veldwidgetklasse voor velden:
core/lib/Drupal/Core/Field/WidgetBase.php
Door een nieuwe child-klasse in de module te maken en deze in de src/Plugin/Field/FieldWidget te plaatsen, wordt de klasse automatisch gekoppeld en kan deze voor het veld worden gebruikt. Laten we de widgetklasse voor het Link-veld bekijken:
core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
De annotatie van de klasse bevat het veldtype waarvoor deze widget gebruikt kan worden:
/**
* Plugin implementatie van de 'link' widget.
*
* @FieldWidget(
* id = "link_default",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
Op deze manier kun je nieuwe veldwidgets toevoegen aan de aangepaste module voor bestaande velden.
Laten we nu verder gaan met de methode formElement(), waarschijnlijk een van de belangrijkste widgetmethoden, waar formulier elementen worden toegevoegd via de Form API. Er zijn drie elementen in de Link-widget:
$element['title']
$element['uri']
$element['attributes']
Deze velden worden vervolgens gebruikt om gegevens in te voeren op een knooppunt- of blokformulier. Validatie wordt ook toegevoegd aan de velden omdat, bijvoorbeeld, het URI-veld het juiste URL of het lokale siteadres moet bevatten.
Een andere belangrijke methode is settingsForm(), deze is verantwoordelijk voor de formulierinstellingen die je kunt zien op de pagina Beheer formulier:
Alle andere methoden in de Field Widget zijn optioneel. We zullen niet dieper ingaan op elke methode omdat ze niet noodzakelijk worden gebruikt om aangepaste modules te schrijven. Als je modules voor bijdragers schrijft, denk ik niet dat het moeilijk voor je zal zijn om de beschrijving van de ouderklasse-methoden te lezen:
core/lib/Drupal/Core/Field/WidgetBase.php
Alle Field Widgets voor velden worden geconfigureerd op het tabblad Beheer formulierweergave voor elke bundelentiteit afzonderlijk: