logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

9.14. Scrivere l'integrazione con Views

30/09/2025, by Ivan

Il modulo Views è ampiamente utilizzato nell’ecosistema di Drupal. Liste di contenuti, tabelle, blocchi, slideshow, esportazione di dati – questi tipi di contenuto di solito vengono visualizzati con Views. Se usi Tipi di contenuto, Tipi di blocco o altri Tipi di entità, allora Views è già integrato automaticamente con essi e puoi utilizzare Views per mostrare i tuoi contenuti. Ma per il tuo modulo personalizzato, dove utilizzi una tabella del database separata e personalizzata, che hai creato con hook_schema(), devi scrivere un’integrazione con Views per visualizzare i dati del tuo modulo nell’interfaccia del modulo Views.

Vediamo l’integrazione del modulo Did this help con Views:

https://www.drupal.org/project/did_this_help

Il modulo crea una propria tabella nel database per memorizzare i dati. In questa tabella ci sono stringhe, ID, date, quindi dobbiamo definire diversi handler per l’integrazione con Views:

Did this help database

All’inizio devi aggiungere il file MODULENAME.views.inc, che viene caricato automaticamente, quindi non devi specificare la posizione del file altrove. Nel file *.views.inc devi implementare hook_views_data():

<?php

/**
 * @file
 * Fornisce i dati di views per did_this_help.module.
 */

/**
 * Implementa hook_views_data().
 */
function did_this_help_views_data() {

}

Per questa implementazione devi restituire un array che descrive la struttura della tua tabella personalizzata del database del modulo custom.

https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php/function/hook_views_data/9.0.x

Inizia con il nome della tabella del database nella prima chiave dell’array:
 

  $data['did_this_help'] = [
    'table' => [
      'group' => t('Did this help?'),
      'base' => [
        'field' => 'id',
        'title' => t('Did this help? entries'),
        'help' => t('Contains a list of Did this help? entries.'),
      ],
    ],
  ];

Qui c’è la descrizione della tabella con il nome nella chiave dell’array $data['did_this_help']. Se devi aggiungere un’integrazione con più tabelle del database, allora aggiungi chiavi diverse per l’array $data: $data['did_this_help1'], $data['did_this_help2'].

Successivamente nella descrizione dell’array “table” segue:

group – permette di raggruppare i campi nella stessa partizione per una selezione più semplice dei campi nell’interfaccia di Views.

base – mostra l’ID seriale per questa tabella, più tardi useremo l’ID seriale per unire le tabelle tramite chiavi esterne.

Dopo di ciò descriviamo ogni campo che vogliamo vedere in Views:

$data['did_this_help']['id']= [
  'real field' => 'id',
  'title' => t('Did this help? record ID'),
  'help' => t('Did this help? record.'),
  'field' => [
    'id' => 'standard',
  ],
  'sort' => [
    'id' => 'standard',
  ],
  'filter' => [
    'id' => 'numeric',
  ],
  'argument' => [
    'id' => 'numeric',
  ],  
];

real field – permette di definire il vero nome del campo (colonna nella tabella del database), se utilizzi alias nelle chiavi dell’array. Per un tipo di campo Drupal i campi reali possono avere valori diversi, ad esempio il campo Link ha due valori Title e URI. Ogni valore corrisponde alla propria colonna della tabella del database. Il nome della colonna è costituito dal nome del campo e dal nome della proprietà (title, uri):

Link DB table

I nomi di queste colonne sono stati creati automaticamente dal modulo Link, ma per i moduli personalizzati il “real field” deve definire i propri valori reali in hook_views_data().

title, help – Informazioni per l’interfaccia del modulo Views.

Seguono poi gli ID degli handler per: field, sort, filter, argument. L’handler definisce il modo in cui filtrare e visualizzare i campi, ad esempio le date devono essere visualizzate con Date Format ed essere filtrate tramite Date Calendar Popup. Per i numeri ci servono filtri con le operazioni >, < e =, per le stringhe serve il filtro per lunghezza della stringa.

Handler di campo

Gli handler di campo aiutano a generare la parte della query SQL dopo la parola SELECT.

L’elenco degli handler di campo di Views dal core di Drupal lo puoi trovare qui:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21field%21FieldPluginBase.php/group/views_field_handlers/8.6.x

Per i moduli personalizzati spesso userai l’handler standard per numeri e stringhe, per i dati con le date dovresti usare l’handler date.

Ad esempio, il campo ID usa l’handler di campo “standard”:

    'id' => [
      'real field' => 'id',
      'title' => t('Did this help? record ID'),
      'help' => t('Did this help? record.'),
      'field' => [
        'id' => 'standard',
      ],
      'sort' => [
        'id' => 'standard',
      ],
      'filter' => [
        'id' => 'numeric',
      ],
      'argument' => [
        'id' => 'numeric',
      ],
    ],

Handler di ordinamento

Gli handler di ordinamento aiutano a usare il normale ordinamento e l’ordinamento esposto in Views. Gli handler di ordinamento definiscono la parte della query SQL dopo le parole ORDER BY.

L’elenco degli handler di ordinamento lo puoi trovare qui:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21sort%21SortPluginBase.php/group/views_sort_handlers/8.6.x

Handler di filtro

Gli handler di filtro aiutano a visualizzare i filtri normali, esposti e contestuali in Views. Gli handler di filtro definiscono la parte della query SQL dopo la parola WHERE.

L’elenco degli handler di filtro lo puoi trovare qui:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21filter%21FilterPluginBase.php/group/views_filter_handlers/8.6.x

Per filtrare le date con il Date Calendar popup puoi usare l’handler “date”:

  $data['did_this_help']['created'] = [
    'title' => t('Created date for Did this help? record'),
    'help' => t('Created date for Did this help? record'),
    'field' => [
      'id' => 'date',
    ],
    'argument' => [
      'id' => 'date',
    ],
    'filter' => [
      'id' => 'date',
    ],
    'sort' => [
      'id' => 'date',
    ],
  ];

Handler di relazioni

Gli handler di relazione aiutano ad aggiungere join nella query SQL e a recuperare dati da più tabelle in una sola query.

La tabella del database del modulo Did this help? ha una colonna con ID utente. Utilizzando l’handler di relazione puoi aggiungere una relazione nell’interfaccia Views tra le righe in did_this_help e users e visualizzare dati da più tabelle:

  $data['did_this_help']['uid'] = [
    'title' => t('User ID for Did this help? record'),
    'help' => t('User ID for Did this help? record'),
    'field' => [
      'id' => 'standard',
    ],
    'sort' => [
      'id' => 'standard',
    ],
    'filter' => [
      'id' => 'numeric',
    ],
    'argument' => [
      'id' => 'numeric',
    ],
    'relationship' => [
      'title' => t('User'),
      'help' => t('The user on which the log entry as written.'),
      'base' => 'users_field_data',
      'base field' => 'uid',
      'id' => 'standard',
    ],
  ];

Per questo aggiungiamo una relazione per il campo, dove specifichiamo il valore “base” con la tabella che vogliamo unire e il campo che useremo per unire tramite questo campo “base field”; title e help per l’interfaccia di Views; id handler di relazione. L’elenco dei tipi di relazione lo puoi vedere qui:

https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21relationship%21RelationshipPluginBase.php/group/views_relationship_handlers/8.6.x

Tuttavia, Views fornisce un’ampia gamma di handler diversi, puoi ereditare la classe base di un handler e scrivere un tuo handler personalizzato per campo, filtro, ordinamento. Nel prossimo articolo scriveremo un handler personalizzato per il filtro di Views.