9.10.2. API des champs Drupal. Formateur de champ : afficher les champs de données sur la page
Dans cet article, nous allons examiner les formateurs de champ (Field Formatters) qui nous permettent de modifier l’affichage des champs et de les afficher sur la page.
Dans des articles précédents, nous avons créé un type de champ Link, dans cet article nous allons voir comment ces champs sont affichés sur la page et quelle classe en est responsable. Chaque champ que vous ajoutez via Drupal peut être affiché sur la page et ses réglages modifiés dans la page Gérer l’affichage.
Dans la colonne Format, vous pouvez choisir la façon d’afficher le champ. Cette colonne est générée grâce aux classes des formateurs de champ (Field Formatter). Regardons la classe du module Link qui affiche le lien sur la page :
core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php
L’annotation de la classe montre à quel type de champ ce formateur appartient.
/**
* Plugin implementation of the 'link' formatter.
*
* @FieldFormatter(
* id = "link",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
Dans ce fichier, ce qui nous intéresse principalement est la méthode viewElements()
, cette méthode est responsable de la sortie des données sur la page. Notez que le formateur ne fait pas de requêtes à la base de données, il prend les données depuis la variable $items
. Les données rendues de l’entité sont passées à $items
. Ainsi, on a une séparation claire des responsabilités entre les classes : le Field Widget pour la saisie des données, le Field Storage pour le stockage des données, et le Field Formatter pour la sortie des données. C’est très pratique car on peut mettre en cache les données à différents niveaux. Par exemple, si l’affichage ou les réglages du Field Formatter changent, il est inutile de vider le cache des nœuds, car les données ne changent pas, seul leur affichage est modifié. C’est aussi pratique pour débattre et ajouter de nouvelles fonctionnalités. Si vous devez seulement modifier l’affichage, vous ajoutez un nouveau Field Formatter pour le type de champ et vous écrivez votre sortie.
La classe LinkFormatter possède aussi la méthode settingsForm()
, qui est responsable de la configuration du formateur sur la page Gérer l’affichage. Via l’API Form, vous pouvez ajouter des champs de réglages pour le champ et ensuite stocker ces réglages dans la configuration.
Le module Link possède un autre formateur :
core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
Il hérite du formateur LinkFormatter habituel, mais avec une différence : un template séparé est connecté pour ce formateur :
core/modules/link/templates/link-formatter-link-separate.html.twig
Ainsi, le HTML pour afficher le champ est obtenu en passant par le template. Et le formateur ne fait que former le tableau $element
, où via $delta
il écrit les données pour chaque valeur d’un champ multiple.
Comme vous pouvez le constater, l’API Field est assez simple et pratique à utiliser. Dans le prochain article, nous écrirons notre propre type de champ avec Storage, Widget et Formatter.