Computed Field, des champs dynamiques sur Drupal

Rédigé par Teddy Vermeulin le 21/12/2023

Dernière mise à jour le 14/03/2024

Découvrez comment les champs calculés (Computed Field) transforment la gestion de contenu sur Drupal, permettant la création dynamique de données personnalisées en temps réel.

Qu'est-ce qu'un champ calculé ?

Un champ calculé est un type de champ que l'on peut ajouter aux entités, telles que les contenus, les utilisateurs, ou encore les termes de taxonomie. Sa particularité réside dans sa capacité à générer des valeurs de manière dynamique en exécutant du code personnalisé, plutôt que de stocker des données saisies manuellement ou importées. Cette fonctionnalité ouvre un large éventail de possibilités pour manipuler et présenter des données en temps réel, adaptant ainsi le contenu affiché aux besoins spécifiques de chaque site et de ses utilisateurs.

Différences entre champs calculés et champs standards

La distinction principale entre les champs calculés et les champs standards réside dans leur source de données. Les champs standards dépendent de données entrées par l'utilisateur ou importées via des flux de données, et ces informations restent statiques jusqu'à ce qu'elles soient manuellement mises à jour. En revanche, les champs calculés tirent leur valeur de la logique de programmation spécifiée par le développeur. Cette logique peut inclure des opérations mathématiques, la manipulation de chaînes de caractères, des appels à des API externes, et bien plus encore.

  • Stockage des données
    Les champs standards stockent des données dans la base de données. 
    Les champs calculés, quant à eux, ne stockent pas directement les résultats de leurs calculs dans la base de données; leur contenu est généré à la volée lors de l'accès à l'entité.
     
  • Flexibilité
    Alors que les champs standards offrent une structure de données fixe, les champs calculés permettent de répondre à des besoins spécifiques qui ne pourraient pas être satisfaits par les types de champs standards.
     
  • Performance
    L'utilisation de champs calculés peut avoir un impact sur les performances du site, car chaque accès à une entité nécessitant le calcul peut entraîner un traitement supplémentaire. Il est donc important d'optimiser la logique de calcul et d'utiliser la mise en cache de manière efficace.

Comment les champs calculés permettent de manipuler et afficher des données en temps réel

Les champs calculés transforment la manière dont les données sont manipulées et présentées dans Drupal.

  1. Mise à jour automatique
    Ils peuvent se mettre à jour automatiquement en fonction des changements dans d'autres champs ou en réponse à des événements externes, garantissant que le contenu reste actuel et pertinent.
     
  2. Personnalisation du contenu
    En utilisant des conditions spécifiques ou en intégrant des données provenant de sources externes, ils peuvent servir à personnaliser le contenu affiché pour des utilisateurs ou des contextes spécifiques.

Comment fonctionnent les champs calculés ?

Création du champ

Pour créer un champ personnalisé, nous allons créer un module custom :

  • custom_module
    • src
      • HelloWordComputedField.php
    • custom_module.info.yml
    • custom_module.module

Dans notre exemple, nous allons créer un champ dynamique qui ajoutera automatiquement la chaîne "Hello World!" à tous les titres de noeuds créés. 

custom_module.info.yml
name: 'Custom Module' type: module description: "Custom module to create computed field." core_version_requirement: ^9.2 || ^10 package: 'Fields'
custom_module.module
<?php use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; /** * Implements hook_entity_base_field_info() for node entities. */ function custom_module_entity_base_field_info(EntityTypeInterface $entity_type) { // Check entity type if ($entity_type->id() === 'node') { // Define an array for your new fields $fields = []; // Define name field $nameField = BaseFieldDefinition::create('string') ->setLabel(t('Hello World Name')) ->setDescription(t('The name of the entity with Hello World.')) ->setSettings([ 'max_length' => 50, 'text_processing' => 0, ]) ->setComputed(TRUE) ->setClass('\Drupal\custom_module\HelloWordComputedField'); $fields['hello_word'] = $nameField; // Return fields return $fields; } }
HelloWordComputedField.php
<?php namespace Drupal\custom_module; use Drupal; use Drupal\Core\Field\FieldItemList; use Drupal\Core\TypedData\ComputedItemListTrait; class HelloWordComputedField extends FieldItemList { use ComputedItemListTrait; /** * @return void */ protected function computeValue(): void { $entity = $this->getEntity(); $value = $this->constructValue($entity); $this->list[0] = $this->createItem(0, $value); } /** * Construct the value to be set. * * @param $entity * The entity to get the label and construct a value from. * * @return string * The constructed string value. */ protected function constructValue($entity): string { $label = $entity->label(); $translation = Drupal::translation()->translate('Hello world!'); return $label . ' - ' . $translation; } }

Affichage du champ

Suite à l'activation de l'extension et à l'ajout d'une nouvelle page, le champ nouvellement créé est désormais visible au sein du contenu de la page. Vous pouvez accéder à la valeur de ce champ directement dans vos templates Twig en utilisant les instructions suivantes :

{# Pour récupérer la valeur #} {% set hello_word_value = node.hello_word.value %} {# Pour afficher le contenu du champ #} {{ content.hello_world }}

Cas d'utilisation typiques

Les champs calculés peuvent être exploités dans divers scénarios, tels que :

  • Calcul de scores ou de classements : Pour un site de compétitions sportives, calculer le classement des équipes ou des joueurs en fonction de leurs performances.
     
  • Personnalisation de contenus : Afficher des messages ou des offres personnalisés en fonction des interactions précédentes de l'utilisateur avec le site.
     
  • Intégration de données en temps réel : Pour un site d'actualités financières, intégrer les dernières valeurs boursières ou les taux de change directement dans le contenu.

Bonnes pratiques et conseils

Pour tirer le meilleur parti des champs calculés, gardez à l'esprit les recommandations suivantes :

  • Optimisez les performances : Soyez conscient de l'impact des calculs sur les performances du site. Utilisez la mise en cache lorsque c'est possible pour réduire le temps de traitement.
     
  • Sécurisez votre code : Évitez les vulnérabilités de sécurité en validant et en échappant correctement toutes les entrées externes utilisées dans vos calculs.
     
  • Testez exhaustivement : Assurez-vous que vos champs calculés fonctionnent correctement dans tous les cas d'utilisation prévus, en tenant compte des différentes données d'entrée et des conditions.

En résumé : les champs calculés, dynamiser Drupal avec intelligence

Les champs calculés sur Drupal offrent une puissante fonctionnalité pour enrichir et personnaliser le contenu d'un site de manière dynamique. En exploitant intelligemment cette capacité, il est possible de créer des expériences utilisateur plus riches et plus interactives, tout en optimisant la gestion du contenu. 

Comme pour toute fonctionnalité avancée, une mise en œuvre réfléchie et une attention particulière à la sécurité et aux performances sont essentielles pour maximiser les bénéfices tout en minimisant les risques.