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
17/10/2025, by Ivan

Menu

Quando importi una configurazione da un sito a un altro, alcune configurazioni sono necessarie per visualizzare i contenuti, ma la configurazione del contenuto stesso non ne contiene alcuna. In questo tutorial, spiegheremo come trasferire blocchi, nodi e termini di tassonomia da un sito a un altro.

Creiamo un blocco su un sito e trasferiamo le configurazioni su un altro sito, puoi vedere come trasferire le configurazioni da un sito a un altro nell'articolo precedente 9.9. Lavorare con le configurazioni in Drupal. Configurazione attiva, sincronizzazione della configurazione, trasferimento delle configurazioni da DEV a LIVE. Configurazione attiva, sincronizzazione, trasferimento delle configurazioni da DEV a LIVE.

admin

Vedrai questo errore: "Questo blocco è danneggiato o mancante. Potresti mancare dei contenuti o potrebbe essere necessario abilitare il modulo originale.":

Test lessions

Il blocco richiede un'entità blocco con un UUID specifico. L'UUID è un identificatore unico dell'entità, anche se creiamo lo stesso blocco con lo stesso contenuto nel nuovo sito, questo blocco non sarà catturato dalla configurazione, poiché il nuovo blocco avrà un UUID diverso. Puoi vedere l'UUID necessario nella configurazione per il blocco:

block content

Non confondere l'UUID del blocco con l'UUID della configurazione. La questione è che anche le configurazioni sono entità in Drupal, ma a differenza dei blocchi e dei nodi che sono entità di contenuto, le configurazioni sono entità di configurazione. In una delle prossime lezioni esamineremo le classi ContentEntity e ConfigEntity.

Quindi ora sai quale UUID ti serve per il blocco e devi creare questo blocco tramite il codice in modo che, quando distribuisci il tuo blocco con l'UUID corretto, venga creato. Per fare ciò, useremo hook_update_n():

https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Extension%

Devi aggiungere hook_update_n() al file .install del modulo personalizzato, in modo che l'aggiornamento venga rilevato dal modulo, che deve essere aggiunto al sito in anticipo ed abilitato. Ogni nuovo hook_update_n() verrà eseguito all'avvio di update.php o tramite l'aggiornamento del database con Drush o Drupal Console. A differenza di altri hook, dove è sufficiente cambiare la parola hook_ all'inizio, in hook_update_n() devi cambiare anche il numero n alla fine per ogni aggiornamento, affinché abbia la propria versione. Di solito si usano numeri a partire da 8000 per Drupal 8.x, 7000 e oltre per Drupal 7.x, cioè la prima cifra rappresenta la versione del core di Drupal.

/modules/custom/drupalbook/drupalbook.install:

/**
 * Aggiungi un blocco semplice con testo e immagine.
 */
function drupalbook_update_8001(&$sandbox) {
  $uuid = 'dc0876cf-a242-4f4c-af0e-8a27fbe9e142';
  $block = \Drupal::entityManager()->loadEntityByUuid('block_content', $uuid);
 
  if (empty($block)) {
    $block = \Drupal\block_content\Entity\BlockContent::create([
      // Titolo del blocco.
      'info' => 'Blocco di testo semplice con immagine',
      // Tipo di blocco.
      'type' => 'basic',
      'uuid' => 'dc0876cf-a242-4f4c-af0e-8a27fbe9e142'
    ]);
    $block->body->value = 'Ciao, Mondo!';
    $block->save();
  }
}

Ora devi spostare questo codice nel secondo sito e quindi eseguire il file update.php lì:

drupal database

Drupal troverà questo aggiornamento e vedrai il tuo blocco una volta completato.

Se guardi il codice che il blocco crea, prima di creare un blocco, controlliamo che il blocco esista, così che quando aggiorni il sito di origine, dove il blocco esiste già, non ci sia errore per l'impossibilità di creare un blocco con un UUID esistente.

Nota anche che solo il testo del blocco viene trasferito, le immagini caricate online nel testo non verranno trasferite tramite il browser di immagini CKEditor, perché i file dovranno essere trasferiti separatamente. È possibile caricarli tramite Drush, SSH, FTP o inserirli in Git (se sono 1 o 2 file, se sono più grandi, è meglio non intasare Git con file immagine). Il processo di distribuzione varia da progetto a progetto e utilizza approcci diversi ovunque, quindi è importante che il progetto abbia almeno una documentazione minima che descriva il processo di distribuzione.

Lo stesso vale per la creazione dei termini di tassonomia, trasferiamo solo le impostazioni del dizionario e i campi dei termini di tassonomia nelle configurazioni, ma i termini di tassonomia stessi dovrebbero essere creati separatamente, ad esempio così:

\taxonomy\Entity\Term;
...
 
/**
 * Crea un termine di tassonomia programmaticamente.
 */
function drupalbook_update_8002(&$sandbox) {
  $term = Term::create([
    'name' => 'Drupal 8',
    'vid' => 'tags',
  ])->save();
}

Nel campo vid devi specificare il nome macchina del dizionario di tassonomia (ID del Vocabolario).

Per creare nodi, devi usare più o meno questo codice:

/**
 * Crea un nodo programmaticamente.
 */
function drupalbook_update_8003(&$sandbox) {
  $node = Node::create(['type' => 'page']);
  $node->set('title', 'Chi siamo');
  $body = [
    'value' => 'Testo su di noi',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
  $node->status = 1;
  $node->enforceIsNew();
  $node->save();
}

Più o meno, perché puoi anche scrivere invece di set() direttamente così:

= [
    'value' => 'Testo su di noi',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
 
// o
 $node->body->format =  'basic_html';
 $node->body->value =  'Testo su di noi',

Ogni volta che aggiungi un nuovo hook_update_n(), devi eseguire update.php. Se usi Acquia o un altro hosting con auto-deployment, questo processo è automatizzato e devi chiarire come avverrà il deployment.

Gli esempi di codice possono essere visti su GitHub:
https://github.com/levmyshkin/drupalbook8