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

Drupal 7 hook_block_info() e hook_block_view() — visualizzare le informazioni in un blocco

14/10/2025, by Ivan

Nella lezione precedente abbiamo creato un modulo per Drupal 7; in questa lezione continueremo ad ampliarne le funzionalità. Aggiungeremo la visualizzazione di un blocco tramite gli hook hook_block_view() e hook_block_info(). In questo blocco verranno mostrate informazioni sugli ultimi utenti registrati sul sito, con un link alla loro pagina profilo.

Iniziamo con la descrizione di hook_block_info():

Definisce tutti i blocchi creati dal modulo.

Questo hook informa Drupal su quali blocchi verranno generati dal modulo e può descrivere le impostazioni di visualizzazione del blocco.

In hook_block_info() ogni blocco del tuo modulo riceve un identificatore univoco chiamato "delta" (una chiave dell’array dei valori restituiti). Il valore delta deve essere univoco all’interno del tuo modulo e viene utilizzato per i seguenti scopi:

  1. Passato come argomento agli altri hook per identificare quale blocco deve essere configurato e visualizzato.
  2. Utilizzato per creare un template HTML del blocco “block-MODULE-DELTA”, applicato a ogni blocco gestito da Drupal (utile per scrivere CSS o JavaScript personalizzati).
  3. Utilizzato per definire funzioni di tematizzazione block__MODULE__DELTA, per una tematizzazione più approfondita.
  4. Utilizzato per identificare il tuo blocco in hook_block_info_alter() e in altri hook correlati.

Il valore di delta può essere una stringa o un numero. La lunghezza massima di delta è 32 byte.

Valori restituiti

Un array associativo le cui chiavi sono i delta di ciascun blocco e i cui valori sono le descrizioni dei blocchi. La descrizione di ogni blocco può essere anch’essa un array associativo con le seguenti coppie chiave-valore:

'info': (obbligatorio) Nome leggibile del blocco per l’interfaccia di amministrazione. Questa informazione serve per identificare il blocco nella sezione “Blocchi” dell’amministrazione e non viene mostrata nel front-end del sito.

'cache': (opzionale) Descrive il comportamento di caching del blocco. Drupal prevede i seguenti comportamenti:

  • DRUPAL_CACHE_PER_ROLE (predefinito): il blocco può variare in base al ruolo dell’utente che visualizza la pagina.
  • DRUPAL_CACHE_PER_USER: il blocco può variare per ciascun utente.
  • DRUPAL_CACHE_PER_PAGE: il blocco può variare in base alla pagina.
  • DRUPAL_CACHE_GLOBAL: il blocco è uguale per tutti gli utenti e tutte le pagine.

DRUPAL_NO_CACHE: il blocco non verrà memorizzato nella cache.

'properties': (opzionale) Array di metadati aggiuntivi per il blocco.

Le proprietà comuni includono:

'administrative': Booleano che indica se il blocco verrà utilizzato in un contesto amministrativo.

'weight': (opzionale) Imposta il peso del blocco.

'status': (opzionale) Imposta lo stato del blocco (1 = attivo, 0 = disattivato).

'region': (opzionale) Imposta la regione in cui verrà visualizzato il blocco.

  • 'visibility': (opzionale) Imposta la visibilità del blocco. I valori possibili sono:
    • BLOCK_VISIBILITY_NOTLISTED: mostra il blocco in tutte le pagine tranne quelle elencate.
    • BLOCK_VISIBILITY_LISTED: mostra il blocco solo nelle pagine elencate.
    • BLOCK_VISIBILITY_PHP: usa codice PHP personalizzato per controllare la visibilità.
  • 'pages': (opzionale) Elenco dei percorsi di pagina per il parametro “visibility”.

Aggiungiamo un blocco tramite l’hook:

<?php
 
function sitemade_block_info(){
    $blocks = array();
    $blocks[1]['info'] = 'Elenco utenti';
    return $blocks;
}
 
?>

Il blocco dovrebbe apparire nella sezione di amministrazione. Aggiungiamolo nella barra laterale sinistra:

drupal block

Ora che abbiamo aggiunto il blocco, mostriamone il contenuto tramite l’hook hook_block_view().

hook_block_view($delta = ''):

Parametri

$delta – indica quale blocco viene elaborato dall’hook. È l’identificatore univoco del blocco nel modulo, definito in hook_block_info().

Valore restituito

Array contenente i seguenti elementi:

subject: Titolo tradotto del blocco. Se il blocco non ha un titolo predefinito, verrà restituito NULL.

content: Contenuto del corpo del blocco. Può essere un array renderizzabile (preferibile) o una stringa contenente HTML già elaborato.

Aggiungiamo questo hook:

<?php
  function sitemade_block_view($delta = ''){
      $block = array(); // inizializziamo un array vuoto per il blocco
      switch ($delta){
          case 1: // stesso delta restituito in hook_block_info()
              $block['subject'] = 'Utenti'; // titolo del blocco
              $block['content'] = ''; // inizializziamo la variabile di contenuto
              $query = db_select('users', 'u') // query per selezionare gli utenti
                ->fields('u', array('uid', 'name')) // selezione dei campi
                ->orderBy('u.uid', 'DESC') // ordiniamo in ordine decrescente
                ->range(0, 5) // selezioniamo cinque utenti
                ->execute(); // eseguiamo la query
              $users = $query->fetchAll(PDO::FETCH_ASSOC); // elaboriamo il risultato come array
              foreach($users as $user){
                  $block['content'] .='<div><a href="' . base_path() . 'user/' . $user['uid'] . '">' . $user['name'] . '</a></div>';
                  // base_path() restituisce il percorso alla radice del sito
              }
          break;
      }
      return $block;
  }
?>

Come risultato, verrà mostrato l’elenco degli ultimi 5 utenti registrati sul sito, sotto forma di link alle loro pagine profilo. Ovviamente sarebbe meglio utilizzare la funzione l() per generare i link, ma questa merita un articolo a parte.

Drupal list users