Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll
04/05/2025, by Ivan

Menu

Cuando importas una configuración de un sitio a otro, algunas configuraciones son necesarias para mostrar contenido, pero el contenido en sí no se incluye en la configuración. En este tutorial, explicaremos cómo transferir bloques, nodos y términos de taxonomía de un sitio a otro.

Creemos un bloque en un sitio y transfiramos la configuración al otro. Puedes ver cómo transferir configuraciones de un sitio a otro en el artículo anterior 9.9. Trabajar con configuraciones en Drupal. Configuraciones activas, sincronizadas y transferencia de configuraciones de DEV a LIVE.

admin

Verás un error como: "Este bloque está dañado o falta. Puede que falte contenido o que necesites habilitar el módulo original.":

Test lessions

El bloque requiere una entidad block con un UUID específico. UUID es un identificador único de la entidad; incluso si creamos el mismo bloque con el mismo contenido en el nuevo sitio, no se reconocerá porque tendrá un UUID diferente. Puedes ver el UUID requerido en la configuración del bloque:

block content

No confundas el UUID del bloque con el UUID de la configuración. Las configuraciones también son entidades en Drupal, pero a diferencia de los bloques y nodos que son entidades de contenido, las configuraciones son entidades de configuración. En una de las próximas lecciones veremos las clases ContentEntity y ConfigEntity.

Ahora que sabes qué UUID necesitas para el bloque, puedes crear este bloque a través del código, de modo que cuando hagas el despliegue, se cree con el UUID correcto. Para ello, usamos hook_update_n():

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

Debes agregar hook_update_n() al archivo .install de tu módulo personalizado. Para que la actualización se detecte, el módulo debe estar habilitado. Cada nuevo hook_update_n() se ejecuta cuando se accede a update.php o se actualiza la base de datos con Drush o Drupal Console. Usa números como 8000 y más para Drupal 8.x (7000 para Drupal 7.x):

/modules/custom/drupalbook/drupalbook.install:

/**
 * Añadir bloque simple con texto e imagen.
 */
function drupalbook_update_8001(&$sandbox) {
  $uuid = 'dc0876cf-a242-4f4c-af0e-8a27fbe9e142';
  $block = \Drupal::entityTypeManager()->getStorage('block_content')->loadByProperties(['uuid' => $uuid]);

  if (empty($block)) {
    $block = \Drupal\block_content\Entity\BlockContent::create([
      'info' => 'Bloque de texto simple con imagen',
      'type' => 'basic',
      'uuid' => $uuid
    ]);
    $block->body->value = '¡Hola, Mundo!';
    $block->save();
  }
}

Ahora mueve este código al segundo sitio y accede a update.php:

drupal database

Drupal encontrará esta actualización y verás tu bloque después de ejecutarla.

Antes de crear el bloque, verificamos si ya existe, para evitar errores si ya está presente en el sitio original. Solo el texto del bloque se transfiere, las imágenes cargadas en línea a través del navegador de imágenes de CKEditor no se incluirán. Debes transferir estos archivos por separado (drush, ssh, ftp, git, etc.).

Lo mismo aplica a términos de taxonomía. Las configuraciones solo incluyen ajustes y campos de términos, pero no los términos en sí. Para crear un término:

\taxonomy\Entity\Term;

/**
 * Crear término de taxonomía.
 */
function drupalbook_update_8002(&$sandbox) {
  $term = Term::create([
    'name' => 'Drupal 8',
    'vid' => 'tags',
  ])->save();
}

En el campo vid coloca el nombre de la taxonomía.

Para crear nodos:

/**
 * Crear nodo programáticamente.
 */
function drupalbook_update_8003(&$sandbox) {
  $node = Node::create(['type' => 'page']);
  $node->set('title', 'Sobre nosotros');
  $body = [
    'value' => 'Texto sobre nosotros',
    'format' => 'basic_html',
  ];
  $node->set('body', $body);
  $node->status = 1;
  $node->enforceIsNew();
  $node->save();
}

También puedes usar esta forma alternativa:

$node->body->format = 'basic_html';
$node->body->value = 'Texto sobre nosotros';

Cada vez que agregues un nuevo hook_update_n(), debes ejecutar update.php. Si usas Acquia u otro hosting con auto-despliegue, este proceso puede estar automatizado.

Ejemplos de código disponibles en GitHub:
https://github.com/levmyshkin/drupalbook8