logo

Types de blocs supplémentaires (EBT) – Nouvelle expérience de Layout Builder❗

Types de blocs supplémentaires (EBT) – types de blocs stylisés et personnalisables : diaporamas, onglets, cartes, accordéons et bien d’autres. Paramètres intégrés pour l’arrière-plan, la boîte DOM, les plugins JavaScript. Découvrez dès aujourd’hui le futur de la création de mises en page.

Démo des modules EBT Télécharger les modules EBT

❗Types de paragraphes supplémentaires (EPT) – Nouvelle expérience Paragraphes

Types de paragraphes supplémentaires (EPT) – ensemble de modules basé sur les paragraphes analogiques.

Démo des modules EPT Télécharger les modules EPT

Défilement
07/07/2025, by Ivan

Menu

Lorsque vous importez une configuration d’un site vers un autre, certaines configurations sont nécessaires pour afficher du contenu, mais le contenu de la configuration elle-même ne les contient pas. Dans ce tutoriel, nous allons expliquer comment transférer des blocs, des nœuds et des termes de taxonomie d’un site à un autre.

Créons un bloc sur un site et transférons la configuration vers un autre site. Vous pouvez voir comment transférer les configurations d’un site à un autre dans l’article précédent 9.9. Travailler avec les configurations dans Drupal. Configuration Active, Sync, transfert de configurations de DEV vers LIVE.

admin

Vous verrez cette erreur : « Ce bloc est cassé ou manquant. Vous pouvez manquer du contenu ou vous devez activer le module d’origine. » :

Test leçons

Le bloc nécessite un bloc entité avec un UUID spécifique. L’UUID est un identifiant unique de l’entité, même si nous créons un bloc identique avec le même contenu sur le nouveau site, ce bloc ne sera pas pris en compte par la configuration car le nouveau bloc aura un UUID différent. Vous pouvez voir l’UUID requis dans la configuration du bloc :

contenu du bloc

Ne confondez pas l’UUID du bloc avec l’UUID de la configuration. En effet, les configurations sont aussi des entités dans Drupal, mais contrairement aux blocs et nœuds qui sont des entités de contenu, les configurations sont des entités de configuration. Dans une prochaine leçon, nous étudierons les classes ContentEntity et ConfigEntity.

Maintenant que vous savez quel UUID est nécessaire pour le bloc, vous devez créer ce bloc via le code afin que lors du déploiement, votre bloc avec le bon UUID soit créé. Pour cela, nous utiliserons hook_update_n() :

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

Le hook_update_n() doit être ajouté dans le fichier .install du module personnalisé, afin que la mise à jour soit prise en compte, le module doit être ajouté au site au préalable et activé. Chaque nouveau hook_update_n() est exécuté lors du lancement de update.php ou de la mise à jour de la base via drush ou drupal console. Contrairement aux autres hooks où il suffit de remplacer le mot hook au début, dans hook_update_n() vous devez changer aussi le n à la fin pour que chaque mise à jour ait sa propre version, on utilise généralement les numéros 8000 et plus pour Drupal 8.x, 7000 et plus pour Drupal 7.x, c’est-à-dire que le premier chiffre correspond à la version du noyau Drupal.

/modules/custom/drupalbook/drupalbook.install :

/**
 * Ajouter un bloc simple avec texte et image.
 */
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([
      // Titre du bloc.
      'info' => 'Bloc texte simple avec image',
      // Type de bloc.
      'type' => 'basic',
      'uuid' => 'dc0876cf-a242-4f4c-af0e-8a27fbe9e142'
    ]);
    $block->body->value = 'Bonjour, Monde !';
    $block->save();
  }
}

Vous devez maintenant transférer ce code vers le second site et lancer le fichier update.php là-bas :

base de données Drupal

Drupal détectera cette mise à jour et vous verrez votre bloc une fois terminée.

Si vous regardez le code qui crée le bloc, avant de créer le bloc, on vérifie qu’il n’existe pas déjà, ainsi lors de la mise à jour de votre site source où le bloc existe déjà, il n’y aura pas d’erreur liée à la création d’un bloc avec un UUID existant.

Notez également que seul le texte du bloc est transféré, les images insérées dans le texte via le navigateur d’images CKEditor ne seront pas transférées, car les fichiers doivent être transférés séparément. Il est possible de les télécharger via drush, ssh, ftp ou de les placer dans git (si ce sont 1 ou 2 fichiers, pour plus gros il vaut mieux ne pas alourdir git avec des fichiers images). Le processus de déploiement varie selon les projets et utilise différentes approches, il est donc important que le projet ait au moins une documentation minimale décrivant ce processus.

Il en va de même pour la création des termes de taxonomie, on ne transfère que les paramètres du vocabulaire et les champs des termes de taxonomie dans la configuration, mais les termes eux-mêmes doivent être créés séparément, par exemple ainsi :

\taxonomy\Entity\Term;
...
 
/**
 * Créer un terme de taxonomie de manière programmatique.
 */
function drupalbook_update_8002(&$sandbox) {
  $term = Term::create([
    'name' => 'Drupal 8',
    'vid' => 'tags',
  ])->save();
}

Dans le champ vid, vous devez indiquer le nom machine du vocabulaire de taxonomie (Vocabulary ID).

Pour créer des nœuds, vous devez utiliser un code similaire :

/**
 * Créer un nœud de manière programmatique.
 */
function drupalbook_update_8003(&$sandbox) {
  $node = Node::create(['type' => 'page']);
  $node->set('title', 'À propos de nous');
  $body = [
    'value' => 'Texte à propos de nous',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
  $node->status = 1;
  $node->enforceIsNew();
  $node->save();
}

En gros, vous pouvez aussi écrire au lieu de set() simplement :

= [
    'value' => 'Texte à propos de nous',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);

// ou
 $node->body->format =  'basic_html';
 $node->body->value =  'Texte à propos de nous';

Chaque fois que vous ajoutez un nouveau hook_update_n(), vous devez lancer update.php. Si vous utilisez Acquia ou un autre hébergeur avec déploiement automatique, ce processus est automatisé et vous devez vous renseigner sur le déroulement du déploiement.

Les exemples de code sont disponibles sur GitHub :
https://github.com/levmyshkin/drupalbook8