Torna al blog

Come creare campi pseudo in Drupal usando 2 hook

2023-03-043 min di lettura

Cosa sono i campi pseudo?

In Drupal, i campi pseudo sono campi che non memorizzano dati nel database, ma generano dinamicamente contenuti al volo. I campi pseudo consentono ai costruttori di siti e agli sviluppatori di aggiungere contenuti personalizzati alle entità (come nodi, utenti e termini di tassonomia) senza dover creare un campo separato per essi.

I campi pseudo si comportano come campi normali per molti aspetti. Tuttavia, invece di memorizzare dati nel database, utilizzano una funzione di callback per generare il loro contenuto quando l'entità viene visualizzata.

Come creare campi pseudo?

Su Drupal 8, 9, 10

Utilizzando hook_ENTITY_TYPE_view() in combinazione con hook_entity_extra_field_info(), è possibile definire campi pseudo personalizzati e specificare esattamente come dovrebbero essere renderizzati quando l'entità viene visualizzata.

Nel seguente esempio, aggiungeremo un campo pseudo al tipo di entità paragrafo che renderizzerà un pulsante di condivisione di Google Classroom ovunque venga utilizzato il paragrafo. Il campo apparirà nella gestione della visualizzazione come i campi creati nell'entità.

Il campo pseudo di Drupal apparirà nell'elenco dei campi nella scheda di gestione della visualizzazione.

La ricetta

Assicurati di aggiungere le due righe seguenti all'inizio del file.

use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;

Nel file my_module.module del tuo modulo personalizzato, definisci il campo pseudo utilizzando la funzione hook_entity_extra_field_info():

/**
 * Implements hook_entity_extra_field_info().
 */
function MY_MODULE_entity_extra_field_info() {
  $display_fields = [];

  $display_fields['paragraph']['google_classroom_button']['display']['google_classroom_button'] = [
    'label' => t('Pulsante Google Classroom'),
    'description' => t('Mostra il pulsante di Google Classroom'),
    'weight' => 100,
    'visible' => TRUE,
  ];

  return $display_fields;
}

In questo esempio, stiamo definendo un campo pseudo chiamato google_classroom_button per il tipo di entità paragraph e il bundle google_classroom_button.

Se desideri aggiungere il campo a un tipo di contenuto, dovresti sostituire la parola paragraph con node e google_classroom_button con il nome del tuo tipo di contenuto, nel codice sopra.


/**
 * Implements hook_ENTITY_TYPE_view().
 */
function MY_MODULE_paragraph_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {


  if ($display->getComponent('google_classroom_button')) {
    $currentUrl = Url::fromRoute('<current>',[] , ['absolute' => 'true'])->toString();
    $output = '<script src="https://apis.google.com/js/platform.js" async defer></script>';
    $output .= '<div class="g-sharetoclassroom" data-size="64" data-url="' . $currentUrl . '" ></div>';
    $build['google_classroom_button'] = [
      '#type' => 'markup',
      '#markup' => $output,
      '#allowed_tags' => ['script', 'div'],
    ];
  }
}

Il codice sopra verifica se il componente "google_classroom_button" è stato aggiunto alla configurazione di visualizzazione dell'entità Paragrafo. In tal caso, genera un output personalizzato per il campo pseudo "google_classroom_button".

Casi d'uso dei campi pseudo

  • Visualizzazione di valori calcolati o aggregati (come il numero di commenti su un nodo)
  • Incorporamento di contenuti da altre fonti (come video di YouTube o feed di social media)
  • Visualizzazione di markup o HTML personalizzato (come un elenco di contenuti correlati)

Considerazioni finali

  • Questo è un modo rapido per ottenere informazioni aggiuntive in un'entità senza dover gestire i template twig.
  • Il campo pseudo non sarà disponibile durante la creazione di una vista per l'entità.

Categorie: