¿Cómo asignar bloques a regiones particulares en la instalación del tema?

9

Drupal 8 proporciona algunos bloques por defecto. P.ej. Site Branding, Main Navigation, Powered by Drupal, SearchEtc.

He creado un tema que tiene Site brandingy Main Navigationnombra regiones en las que se pueden colocar los bloques correspondientes.

Cuando habilito mi tema, los bloques Site Branding& Main Navigationse colocan en Header& First Sidebarregion de mi tema por defecto respectivamente.

¿Cómo puedo colocar Site Brandingy Main Navigationbloquear en sus respectivas regiones de forma predeterminada en la instalación del tema?

kmdhrm
fuente
2
Debe crear instancias de bloque que sean objetos de configuración y colocarlas en el directorio config / install de su tema.

Respuestas:

8

En primer lugar, debe cambiar cada región de bloque deseada que desee manualmente Administration>Structure>Block layout Taby luego ir a la función de exportación de configuración en:
Administration>Configuration>Development>Configuration synchronization>Export Tab>Single itempara exportar cada una de las configuraciones de bloque para su tema.
Luego, debe echar un vistazo a los archivos YAML generados y colocarlos en una nueva carpeta dentro de su tema en /config/install. luego desinstaló el tema y luego lo reinstaló como predeterminado.

Resumen:
1. Instalar MY_THEME
2. Coloque los bloques en las regiones deseadas
3. Exporte los archivos de configuración y elimínelos uuidy el hash de configuración central,
por ejemplo Site Branding, el block.block.MY_THEME_branding.ymlarchivo de bloque

langcode: en
status: true
dependencies:
  module:
    - system
  theme:
    - DEPENDENT_THEME
id: MY_THEME_branding
theme: MY_THEME
region: site_branding
weight: 0
provider: null
plugin: system_branding_block
settings:
  id: system_branding_block
  label: 'Site branding'
  provider: system
  label_display: '0'
  use_site_logo: true
  use_site_name: true
  use_site_slogan: true
visibility: {  }
  1. Coloque los archivos de configuración a MY_THEME/config/optionalo MY_THEME/config/installdirectorio (si está absolutamente seguro se cumplen todas las dependencias)
  2. Desinstalar MY_THEMEy borrar todas las cachés
  3. Reinstalar MY_THEMEnuevamente
Mojtaba Reyhani
fuente
7

Encontró la respuesta:

Esto se puede hacer agregando un archivo yml (instancia de bloque) para cada bloque en la theme/config/installcarpeta.

Por ejemplo, para asignar el Site Brandingbloque (nombre de la máquina system_branding_block) a la Site Brandingregión (nombre de la máquina site_branding) agregue el siguiente código en el config/install/block.block.THEME_NAME_branding.ymlarchivo:

langcode: en
status: true
dependencies:
  module:
    - system
  theme:
    - DEPENDENT_THEME
id: THEME_NAME_branding
theme: THEME_NAME
region: site_branding
weight: 0
provider: null
plugin: system_branding_block
settings:
  id: system_branding_block
  label: 'Site branding'
  provider: system
  label_display: '0'
  use_site_logo: true
  use_site_name: true
  use_site_slogan: true
visibility: {  }
kmdhrm
fuente