Drupal 8: Exportar configuración mediante drupal console

Cabecera - Drupal 8: Exportar configuración mediante drupal console

Drupal 8: Exportar configuración mediante drupal console

  • Autor: fjavimartin

  • Fecha de Creación: 09/01/2019

  • Categorías:

    • Drupal,
    • Drupal 8,
    • Drupal console,
    • Exportar configuración

Una de las novedades de drupal 8 es la posibilidad de exportar configuraciones realizadas desde la interface de administración mediante archivos YAML. En este artículo veremos como utilizar drupal console para exportar esta configuración y utilizarla después en nuestros módulos.

1. Drupal console

Nada más entrar en la web de drupal console encontramos una definición de esta herramienta: “Interface de comandos para drupal. Una herramienta para generar código repetitivo, interaccionar y depurar drupal.”

El primer paso para empezar con drupal console será la instalación de esta herramienta y para eso ya tenemos en este mismo blog una guía para su instalación en este mismo enlace.

Una vez tengamos instalado drupal console bastará ejecutar la siguiente instrucción desde el directorio raíz de nuestro sitio para ver un resumen de todas las opciones que nos ofrece:

$ drupal

Entre todos los comandos que nos ofrece drupal console encontramos los que nos interesan:

config
  config:delete (cd)                      Delete configuration
  config:diff (cdi)                       Output configuration items that are different in active configuration compared with a directory.
  config:edit (ced,cdit)                  Change a configuration object with a text editor.
  config:export (ce)                      Export current application configuration.
  config:export:content:type (cect)       Export a specific content type and their fields.
  config:export:single (ces)              Export a single configuration or a list of configurations as yml file(s).
  config:export:view (cev)                Export a view in YAML format inside a provided module to reuse in other website.
  config:import (ci)                      Import configuration to current application.
  config:import:single (cis)              Import a single configuration or a list of configurations.
  config:override (co)                    Override config value in active configuration.
  config:validate (cv)                    Validate a drupal config against its schema

En nuestro caso utilizaremos el comando config:export:content:type que nos permitirá exportar un tipo de contenido completo junto con todos los campos que tenga configurados y las opciones de presentación.

Otra de las herramientas que podríamos utilizar para este cometido es drush, pero la diferencia con drupal console es que no nos permite exportar un tipo de contenido completo o un solo elemento de configuración sino la configuración completa de nuestro sitio.

2. Tipo de contenido de prueba

Para nuestro ejemplo crearemos un tipo de contenido muy sencillo llamado “signingType” que solamente contendrá un campo llamado field_efichajes_enabled de tipo booleano.

Drupal 8: Exportar configuración mediante drupal console - Tipo de contenido de prueba - gestión de campos

La configuración para la presentación del formulario.

Drupal 8: Exportar configuración mediante drupal console - Tipo de contenido de prueba - presentación formulario

La configuración para la presentación del contenido – versión completa.

Drupal 8: Exportar configuración mediante drupal console - Tipo de contenido de prueba - presentación contenido - versión completa

La configuración para la presentación del contenido – versión resumida.

Drupal 8: Exportar configuración mediante drupal console - Tipo de contenido de prueba - Presentación del contenido - versión resumida

3. Comando config:export:content:type

Lo primero será ver cuáles son las diferentes opciones del comando:

$ drupal help config:export:content:type
Usage:
  config:export:content:type [options] [--] <content-type>
  cect

Arguments:
  content-type                             Content Type to be exported

Options:
      --module=MODULE                      The Module name.
      --optional-config[=OPTIONAL-CONFIG]  Export content type as an optional YAML configuration in your module
      --remove-uuid                        If set, the configuration will be exported without uuid key.
      --remove-config-hash                 If set, the configuration will be exported without the default site hash key.

Examples:
  Provide a content type  and module name
  drupal config:export:content:type page \
  --module="demo"

  If you want export content type provide the optional config
  drupal config:export:content:type page \
  --module="demo" \
  --optional-config 

Help:
 Export a specific content type and their fields.

Solamente podremos realizar la exportación de la configuración sobre alguno de los módulos que tengamos descargados en nuestro sitio, instalado o no. Para el caso que no utilicemos ningún valor nos ofrecerá el primer módulo que tengamos en el directorio modules.

Otra de las novedades que ofrece drupal 8 es que cada uno de sus objetos tiene un identificador universal. Mediante la opción –remove-uuid podremos eliminar este identificador en la exportación para que se le asigne uno nuevo al importarse.

La opción –remove-config-hash hará algo parecido a la anterior, pero esta vez con el hash que identifica nuestro sitio.

Mediante la opción –optional-config nos permitirá exportar la configuración al directorio de opcional de nuestro módulo. Tengo que decir que después de intentarlo varias veces y probar con varios valores para esta opción siempre lo generaba como opcional, si no utilizáis esta opción os solicitará el valor [yes/no] por línea de comandos para continuar.

4. Exportar contenido

Una vez tenemos creado nuestro contenido de prueba y analizadas las diferentes opciones del comando a utilizar solamente nos quedará exportar la configuración con el siguiente comando:

$ drupal config:export:content:type --module=efichajes --optional-config --remove-uuid --remove-config-hash signingtype

Exporting content type
 - modules/custom/efichajes/config/optional/node.type.signingtype.yml
 - modules/custom/efichajes/config/optional/field.field.node.signingtype.field_efichajes_enabled.yml
 - modules/custom/efichajes/config/optional/field.storage.node.field_efichajes_enabled.yml
 - modules/custom/efichajes/config/optional/core.entity_form_display.node.signingtype.default.yml
 - modules/custom/efichajes/config/optional/core.entity_view_display.node.signingtype.default.yml
 - modules/custom/efichajes/config/optional/core.entity_view_display.node.signingtype.teaser.yml
- modules/custom/efichajes/config/optional/core.entity_view_mode.node.teaser.yml

Si unimos todos estos ficheros tendremos la configuración completa de nuestro tipo de contenido junto con la de sus campos.

El contenido del fichero modules/custom/efichajes/config/optional/node.type.signingtype.yml será el siguiente:

langcode: en
status: true
dependencies:
  enforced:
    module:
      - efichajes
  module:
    - menu_ui
third_party_settings:
  menu_ui:
    available_menus:
      - main
    parent: 'main:'
name: SigningType
type: signingtype
description: 'Content type that represents a signing type.'
help: ''
new_revision: true
preview_mode: 1
display_submitted: true

¿Que raro? ¿Donde está la configuración de sus campos?……..Tendremos un fichero por cada uno de los campos que tenga cada tipo de contenido con su configuración correspondiente.

Esta será la configuración de nuestro campo.

langcode: en
status: true
dependencies:
  enforced:
    module:
      - efichajes
  config:
    - field.storage.node.field_efichajes_enabled
    - node.type.signingtype
id: node.signingtype.field_efichajes_enabled
field_name: field_efichajes_enabled
entity_type: node
bundle: signingtype
label: 'efichajes - enabled'
description: 'Set this field to make this content type available.'
required: true
translatable: false
default_value:
  -
    value: 1
default_value_callback: ''
settings:
  on_label: Activado
  off_label: Desactivado
field_type: boolean

¿Que pasa si un campo está en varios tipos de contenido?……..Tendremos un único fichero para todos los campos donde estará la configuración de su almacenamiento.

Esta será la configuración del almacenamiento de nuestro campo.

langcode: en
status: true
dependencies:
  enforced:
    module:
      - efichajes
  module:
    - node
id: node.field_efichajes_enabled
field_name: field_efichajes_enabled
entity_type: node
type: boolean
settings: {  }
module: core
locked: false
cardinality: 1
translatable: true
indexes: {  }
persist_with_no_fields: false
custom_storage: false

5. Dependencias en el contenido exportado

Si cogemos todos los ficheros que acabamos de generar los llevamos a nuestro módulo y lo instalamos comprobaremos que nuestro tipo de contenido se creará automáticamente junto con el campo que tiene configurado, pero si realizamos la desinstalación de nuestro módulo no se eliminarán de nuestro sitio. Si queremos que cuando desinstalemos nuestro módulo se realice la eliminación de toda la configuración que hayamos creado deberemos añadir una dependencia a cada uno de los ficheros de configuración con la siguiente línea:

enforced:
    module:
      - efichajes

De esta forma cuando realicemos la desinstalación de nuestro módulo también se eliminará su configuración. De esta forma la configuración de nuestro tipo de contenido quedará de la siguiente manera:

langcode: en
status: true
dependencies:
  enforced:
    module:
      - efichajes
  module:
    - menu_ui
third_party_settings:
  menu_ui:
    available_menus:
      - main
    parent: 'main:'
name: SigningType
type: signingtype
description: 'Content type that represents a signing type.'
help: ''
new_revision: true
preview_mode: 1
display_submitted: true

6. Conclusiones

Además de la exportación de configuración varia también podremos eliminar una configuración determinada de nuestro sitio o exportar una vista con los comandos que nos ofrece drupal console:

config
  config:delete (cd)                      Delete configuration
  config:diff (cdi)                       Output configuration items that are different in active configuration compared with a directory.
  config:edit (ced,cdit)                  Change a configuration object with a text editor.
  config:export (ce)                      Export current application configuration.
  config:export:content:type (cect)       Export a specific content type and their fields.
  config:export:single (ces)              Export a single configuration or a list of configurations as yml file(s).
  config:export:view (cev)                Export a view in YAML format inside a provided module to reuse in other website.
  config:import (ci)                      Import configuration to current application.
  config:import:single (cis)              Import a single configuration or a list of configurations.
  config:override (co)                    Override config value in active configuration.
  config:validate (cv)

Eliminar las cachés también será algo muy sencillo con los siguientes comandos:

cache
  cache:rebuild (cr,cc)                   Rebuild and clear all site caches.
  cache:tag:invalidate (cti)              Invalidate cache tags.

Espero que saquéis mucho provecho de esta información y os sirva como punto de partida para conocer esta herramienta muy práctica.

Disfrutar!!!!

Referencias

https://www.e-quipos.es/blog/drupal-instalando-drupal-console-en-ubuntu

https://drupalconsole.com/

https://hechoendrupal.gitbooks.io/drupal-console/content/en/commands/config-export-content-type.html

https://www.drupal.org/docs/8/api/entity-api/creating-a-custom-content-type-in-drupal-8

Todos los Derechos Reservados © 2016

Funciona con Drupal