Contenido por defecto en Drupal con Default Content

anja-bauermann-heDpk-qhwZg-unsplash.jpg
Solucionex
17
Mar 23

TL;DR: El módulo default_content permite la creación de contenido desde código.

Aviso: el módulo se encuentra en versión alfa, y aunque no parece que vaya a aparecer versión estable en un futuro cercano, es usable.

Posibles usos

La creación de contenido por defecto puede ser útil en los siguientes casos:

  • Web multisitio con contenidos idénticos entre sitios. Ej: página de política de privacidad
  • Inicios del desarrollo de una web, para que al instalar de 0 ya se tenga algo de contenido más "realista" de lo que podría generar, por ejemplo, devel
  • Trasladar contenido entre entornos (por ejemplo, subir a producción un bloque personalizado directamente creado en local)

Instalación

Instalación normal con composer:

composer require 'drupal/default_content:^2.0@alpha'

Instalación desde la página de módulos "/admin/modules" o con drush "drush pm:enable default_content".

Funcionamiento del módulo

El módulo permite exportar los contenidos existentes (archivos, media, nodos, enlaces de menú, bloques, etc.) que se quieran para luego crearlos al instalar un módulo.

Exportar contenido

Default content provee varios comandos de drush para exportar el contenido desde la base de datos al código del proyecto en formato yml:

  • "default-content:export" (alias dce) Exporta un contenido. Ej: "drush dce node 1 --file=modules/custom/example/content/node/node_title.yml"
    • La ventaja de este comando es que permite poner nombre específico a cada contenido exportado en lugar de un inteligible UUID, pero habría que exportar las dependencias (ej: imágenes) manualmente
  • "default-content:export-references" (alias dcer) Exporta un contenido y sus dependencias. Ej: "drush dcer node 1 --folder=modules/custom/example/content"

Nota: al exportar usuarios, para evitar que la contraseña sea cifrada de nuevo y por lo tanto sea distinta a la puesta actualmente, hay que cambiar el valor "pre_hashed" a "true".
Briconsejo: exportar solamente usuarios de prueba, no reales. No es seguro dejar credenciales, aunque estén cifradas en el repositorio.

---
pass:
  -
    value: XXXXXXXXXXXXXXXXXXXX
    existing: ''
    pre_hashed: true

Exportar el contenido definido en un módulo

Para exportar múltiples contenidos de una sola vez, pueden definirse los UUIDs dentro del archivo info del módulo:

---
default_content:
  file:
    - a61fa7ec-0042-4046-a111-57b729928784
  media:
    - b56d009d-4c04-4069-ae0d-237a8913aee0
  menu_link_content:
    - 3f5f8cb7-c6f3-476e-ad51-022037192f66
    - 45bda6ee-cf9d-4b8f-93cc-6dc3ff72c9c8
  node:
    - d4de3ab9-590a-4c03-8639-64b35eac5d0f
    - 7ed643cd-77b6-44a9-8d92-53e86e086bc8
  taxonomy_term:
    - 4bbaf48c-8ca7-4447-b30d-21da55a38eec
    - 8160a8aa-d303-4208-b9bc-3e72705e98ed
  user:
    - 884dc358-2d6c-4611-b36e-1ee1b1420e64
    - 4764185b-53bb-4d4b-b838-9341d3c5f568

Con el comando "drush default-content:export-module [NOMBRE MÓDULO]" (alias dcem), se exportará directamente todo el contenido definido a la carpeta "content" de dicho módulo.

Importar contenido

Se importa el contenido por defecto definido en un módulo al instalarse este (ej: al instalar el módulo "content_example" se crearía todo el contenido previamente exportado en "content_example/content". Es indiferente cualquiera de los comandos para exportar usados).

Arreglos y ampliación de funcionalidades

Conclusión

Como muchas cosas en drupal, el módulo default_content puede ser una herramienta muy útil, siempre y cuando se tenga en cuenta que hay que saber dónde darle un par de martillazos para que funcione fino.

Imagen por Anja Bauermann de Unsplash.