Torna al blog

Creazione di una Custom Table in Drupal 10 e Integrazione con Views

Drupal 10 è noto per la sua estensiva personalizzabilità tramite moduli custom. Questo articolo dettaglia come creare una tabella personalizzata che gestisce token associati a utenti e contenuti tipo articolo, e come integrarla con Views per una gestione e visualizzazione efficace.

Sezione 1: Creazione del Modulo Custom

1.1 Struttura del Modulo

Per iniziare, crea una cartella per il tuo modulo in modules/custom/mio_modulo. I file principali da includere sono:

  • mio_modulo.info.yml: Contiene i metadati del modulo.
  • mio_modulo.module: Il file principale che contiene la logica del modulo.
  • mio_modulo.install: Gestisce l'installazione, la disinstallazione e la definizione dello schema del database.

Esempio di mio_modulo.info.yml

name: 'Mio Modulo'
type: module
description: 'Un modulo per gestire token associati a utenti e articoli.'
core_version_requirement: ^10
package: Custom
dependencies:
  - drupal:views

1.2 Definizione della Tabella Custom

Utilizza l'hook_schema in mio_modulo.install per definire la struttura della tabella.

Ecco un esempio:

mio_modulo.install

function mio_modulo_schema() {
    $schema['mio_modulo_tokens'] = [
        'description' => 'Tabella per conservare token associati a utenti e articoli.',
        'fields' => [
            'id' => [
                'description' => 'ID primario autoincrementale.',
                'type' => 'serial',
                'unsigned' => TRUE,
                'not null' => TRUE,
            ],
            'user_id' => [
                'description' => 'ID dell\'utente.',
                'type' => 'int',
                'unsigned' => TRUE,
                'not null' => TRUE,
            ],
            'article_nid' => [
                'description' => 'ID del nodo di tipo articolo.',
                'type' => 'int',
                'unsigned' => TRUE,
                'not null' => TRUE,
            ],
            'token' => [
                'description' => 'Token associato.',
                'type' => 'varchar',
                'length' => 255,
                'not null' => TRUE,
            ]
        ],
        'primary key' => ['id'],
    ];
    return $schema;
}

Sezione 2: Popolamento della Tabella

Popola la tabella durante l'installazione del modulo o tramite interfacce utente personalizzate.

Sezione 3: Creazione di una View

3.1 Attivazione del Modulo Views

Assicurati che il modulo Views sia installato e attivo.

3.2 Creazione della View Utilizzando hook_views_data

L'hook hook_views_data() è cruciale per integrare i dati della tua tabella con Views. Qui definisci come i campi possono essere utilizzati in Views, inclusi filtri, ordinamenti e relazioni.

mio_modulo.module

function mio_modulo_views_data() {
    $data = [];

    // Base table definition
    $data['mio_modulo_tokens']['table']['group'] = t('Mio Modulo Tokens');
    $data['mio_modulo_tokens']['table']['base'] = [
        'field' => 'id',
        'title' => t('Tokens'),
        'help' => t('Token associati a utenti e articoli.'),
    ];

    // User ID field with relationship
    $data['mio_modulo_tokens']['user_id'] = [
        'title' => t('User ID'),
        'help' => t('L\'ID dell\'utente associato al token.'),
        'field' => [
            'id' => 'numeric',
        ],
        'filter' => [
            'id' => 'numeric',
        ],
        'sort' => [
            'id' => 'standard',
        ],
        'relationship' => [
            'base' => 'users_field_data', // La tabella base con cui unirsi
            'base field' => 'uid', // Il campo nella tabella base
            'field' => 'user_id', // Il campo nella tua tabella personalizzata da usare per il join
            'id' => 'standard',
            'label' => t('User associated with the token'),
        ],
    ];

    // Article Node ID field with relationship
    $data['mio_modulo_tokens']['article_nid'] = [
        'title' => t('Article Node ID'),
        'help' => t('L\'ID del nodo articolo associato al token.'),
        'field' => [
            'id' => 'numeric',
        ],
        'filter' => [
            'id' => 'numeric',
        ],
        'sort' => [
            'id' => 'standard',
        ],
        'relationship' => [
            'base' => 'node_field_data', // La tabella base con cui unirsi
            'base field' => 'nid', // Il campo nella tabella base
            'field' => 'article_nid', // Il campo nella tua tabella personalizzata da usare per il join
            'id' => 'standard',
            'label' => t('Article associated with the token'),
        ],
    ];

    // Token field
    $data['mio_modulo_tokens']['token'] = [
        'title' => t('Token'),
        'help' => t('Il token stesso.'),
        'field' => [
            'id' => 'standard',
        ],
        'filter' => [
            'id' => 'string',
        ],
        'sort' => [
            'id' => 'standard',
        ],
    ];
    return $data;
}

Questo hook definisce come i dati della tabella sono presentati e manipolati in Views, dettagliando filtri, ordinamenti, campi, relazioni e altre proprietà.

Ecco una spiegazione dettagliata delle parti più importanti dell'hook come implementato per la tabella mio_modulo_tokens:

Definizione di base della tabella

Group: Raggruppa tutte le viste relative alla tabella sotto un nome comune nel UI di Views.

Base: Specifica la tabella e il campo chiave primaria, che Views userà come riferimento principale. Questo è fondamentale per ogni operazione che Views effettuerà sulla tabella.

Campi specifici

User ID e Article Node ID: Entrambi sono definiti come campi numerici, rendendoli disponibili per essere usati come filtri (per esempio, filtrare per user ID o article ID) e come criteri di ordinamento. Oltre a ciò, sono marcati come relazioni, il che estende significativamente la loro utilità.

Relazioni

Le relazioni permettono a Views di unire la tua tabella custom con altre tabelle nel database di Drupal, basandosi su campi specifici.

User ID: Relaziona il campo user_id della tua tabella con il campo uid nella tabella users_field_data, permettendo a Views di accedere a dati aggiuntivi degli utenti direttamente dalle viste create.

Article Node ID: Collega il campo article_nid con nid in node_field_data, che permette di visualizzare o filtrare le informazioni basate sui nodi correlati agli ID degli articoli.

Queste relazioni trasformano semplici numeri ID in collegamenti ricchi di informazioni tra diverse entità su Drupal, migliorando significativamente la capacità di reportistica e analisi dei dati attraverso Views.

Campo Token

Il campo token è un esempio di come un campo standard può essere configurato per essere usato in diverse maniere in Views: visualizzato direttamente, utilizzato come filtro (permettendo ricerche basate sul token), e incluso in ordinamenti.

Sezione 4: Creazione di una Vista tramite l'Interfaccia di Drupal

Dopo aver configurato il modulo e implementato l'hook hook_views_data() per esporre i dati della tua tabella custom, il passaggio successivo è creare una vista utilizzando l'interfaccia di Drupal. Ecco come procedere:

  • Accedi come Amministratore: Assicurati di avere i permessi necessari e accedi al tuo sito Drupal come amministratore.
  • Apri la Gestione di Views: Vai a Struttura > Views nel menu di amministrazione per accedere alla pagina di gestione delle viste.
  • Aggiungi una Nuova Vista: Clicca sul pulsante "Aggiungi nuova vista". Inserisci un nome descrittivo per la tua vista, come "Vista Token Utenti e Articoli", e imposta se vuoi creare una pagina o un blocco.
  • Configura i Campi: Nell'editor di Views, seleziona e configura i campi da visualizzare, come user_id, article_nid, e token.
  • Imposta Filtri e Ordinamenti: Definisci filtri e criteri di ordinamento per organizzare i dati visualizzati secondo le tue necessità.
  • Salva e Anteprima: Dopo aver configurato tutti i campi e le impostazioni, salva la vista e utilizza l'anteprima per testarne il funzionamento e l'aspetto.
  • Modifiche Finali: Se necessario, puoi tornare alle impostazioni della vista per apportare ulteriori modifiche o miglioramenti.

Conclusione

L'utilizzo dell'hook hook_views_data() per integrare tabelle custom con Views rappresenta una delle tecniche più potenti e flessibili di Drupal. Questo approccio non solo permette di visualizzare i dati in modo efficiente e interattivo ma apre anche porte a una vasta gamma di possibilità per la manipolazione e l'analisi dei dati all'interno del tuo sito Drupal.

Le relazioni definite nell'hook permettono di integrare e visualizzare dati da diverse entità, arricchendo così la comprensione e l'interazione con il contenuto del sito. I campi numerici, come user_id e article_nid, trasformano i semplici numeri in potenti link che uniscono gli utenti e i contenuti, offrendo una vista più integrata e completa del funzionamento del sito.

In definitiva, saper sfruttare hook_views_data() nel contesto di Drupal 10 può significativamente migliorare la gestione dei dati, rendendo il sito più dinamico e adattabile alle esigenze degli utenti e degli amministratori. Con le configurazioni appropriate, il tuo modulo non solo potenzierà le capacità di Drupal ma fornirà anche strumenti utili per gestire, visualizzare e analizzare i dati in maniera più efficace. Questa è una competenza inestimabile per sviluppatori che aspirano a costruire applicazioni web robuste e interattive con Drupal.

Per maggiori informazioni: https://api.drupal.org/api/drupal/core%21modules%21views%21views.api.php/function/hook_views_data/10