logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll
27/05/2025, by Ivan

Menu

Wenn Sie eine Konfiguration von einer Seite auf eine andere importieren, werden einige Konfigurationen benötigt, um Inhalte auszugeben, aber die Inhalte selbst sind nicht in der Konfiguration enthalten. In diesem Tutorial erklären wir, wie man Blöcke, Nodes und Taxonomie-Begriffe von einer Seite auf eine andere überträgt.

Erstellen wir einen Block auf einer Seite und übertragen die Konfigurationen auf eine andere. Wie man Konfigurationen von einer Seite auf eine andere überträgt, sehen Sie im vorherigen Artikel 9.9. Arbeiten mit Konfigurationen in Drupal. Aktive, Sync-Konfiguration, Übertragung von DEV zu LIVE.

Administration

Sie sehen eventuell den Fehler: "Dieser Block ist defekt oder fehlt. Möglicherweise fehlt Inhalt oder das ursprüngliche Modul muss aktiviert werden.":

Test lessons

Der Block benötigt ein Entity-Block mit einer spezifischen UUID. UUID ist der eindeutige Bezeichner der Entität. Selbst wenn Sie denselben Block mit gleichem Inhalt auf der neuen Seite anlegen, wird dieser Block von der Konfiguration nicht erkannt, weil er eine andere UUID hat. Die benötigte UUID finden Sie in der Konfiguration des Blocks:

Block Inhalt

Verwechseln Sie nicht die UUID des Blocks mit der UUID der Konfiguration. Konfigurationen sind in Drupal ebenfalls Entitäten, aber im Gegensatz zu Blöcken und Nodes, die Content-Entitäten sind, sind Konfigurationen Config-Entitäten. In einem der nächsten Lektionen betrachten wir ContentEntity und ConfigEntity Klassen.

Sie wissen nun, welche UUID der Block haben muss, und müssen diesen Block über Code erzeugen, sodass bei der Bereitstellung der Block mit der korrekten UUID erstellt wird. Dazu verwenden wir hook_update_n():

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

Den hook_update_n() müssen Sie in die .install-Datei Ihres Custom-Moduls hinzufügen, damit das Update erkannt wird. Das Modul muss vorab installiert und aktiviert sein. Jedes neue hook_update_n() wird beim Start von update.php oder einer Datenbankaktualisierung via Drush oder Drupal Console ausgeführt. Anders als bei anderen Hooks müssen Sie bei hook_update_n() die Zahl n jeweils erhöhen, damit jede Aktualisierung eine eigene Versionsnummer hat. Üblich sind Nummern ab 8000 für Drupal 8.x und ab 7000 für Drupal 7.x, wobei die erste Ziffer die Drupal-Version bezeichnet.

/modules/custom/drupalbook/drupalbook.install:

/**
 * Fügt einen einfachen Block mit Text und Bild hinzu.
 */
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([
      // Block-Titel.
      'info' => 'Simple text block with image',
      // Block-Bundle.
      'type' => 'basic',
      'uuid' => 'dc0876cf-a242-4f4c-af0e-8a27fbe9e142'
    ]);
    $block->body->value = 'Hello, World!';
    $block->save();
  }
}

Jetzt müssen Sie diesen Code auf die zweite Seite übertragen und dort update.php ausführen:

Drupal Datenbank

Drupal findet das Update und nach der Ausführung sehen Sie den Block.

Im Code prüfen wir vor der Block-Erstellung, ob der Block schon existiert, damit beim Update der Quellseite keine Fehlermeldung entsteht, wenn der Block mit der UUID bereits existiert.

Beachten Sie, dass nur der Text des Blocks übertragen wird. Bilder, die im Text über den Image Browser (CKEditor) eingebunden sind, werden nicht übertragen, da die Dateien separat übertragen werden müssen. Das kann via Drush, SSH, FTP oder Git erfolgen (bei wenigen Dateien Git, bei vielen nicht empfehlenswert). Der Bereitstellungsprozess ist projektspezifisch und sollte wenigstens minimal dokumentiert sein.

Gleiches gilt für das Erstellen von Taxonomie-Begriffen. Übertragen werden nur die Einstellungen des Vokabulars und die Feldkonfiguration, die Begriffe selbst müssen separat erzeugt werden, z.B. so:

use \Drupal\taxonomy\Entity\Term;
...
 
/**
 * Erzeugt ein Taxonomie-Term programmgesteuert.
 */
function drupalbook_update_8002(&$sandbox) {
  $term = Term::create([
    'name' => 'Drupal 8',
    'vid' => 'tags',
  ])->save();
}

Im Feld vid geben Sie den maschinenlesbaren Namen des Taxonomie-Vokabulars an.

Zum Erstellen von Nodes können Sie ungefähr diesen Code verwenden:

/**
 * Erzeugt einen Node programmgesteuert.
 */
function drupalbook_update_8003(&$sandbox) {
  $node = Node::create(['type' => 'page']);
  $node->set('title', 'Über uns');
  $body = [
    'value' => 'Text über uns',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
  $node->status = 1;
  $node->enforceIsNew();
  $node->save();
}

Alternativ können Sie auch schreiben statt set():

= [
    'value' => 'Text über uns',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
 
// oder
 $node->body->format =  'basic_html';
 $node->body->value =  'Text über uns';

Jedes Mal, wenn Sie eine neue hook_update_n() hinzufügen, müssen Sie update.php ausführen. Nutzt man Acquia oder anderes Hosting mit automatischem Deployment, läuft dieser Prozess automatisiert und es ist wichtig, den Deployment-Prozess zu kennen.

Code-Beispiele finden Sie auf GitHub:
https://github.com/levmyshkin/drupalbook8