Como atribuir blocos a regiões específicas na instalação do tema?

9

O Drupal 8 fornece alguns blocos por padrão. Por exemplo. Site Branding, Main Navigation, Powered by Drupal, SearchEtc.

Eu criei um tema que tem Site branding& Main Navigationnomeou regiões nas quais os blocos correspondentes podem ser colocados.

Quando eu ativo o meu tema, Site Branding& Main Navigationblocos são colocados na Header& First Sidebarregião do meu tema por padrão, respectivamente.

Como posso colocar Site Brandinge Main Navigationbloquear suas respectivas regiões por padrão na instalação do tema?

kmdhrm
fonte
2
Você precisa criar instâncias de bloco que são objetos de configuração e colocá-las no diretório config / install do seu tema.

Respostas:

8

Primeiro, você deve alterar manualmente cada região de bloco desejada em que deseja Administration>Structure>Block layout Tabe, em seguida, acessar a função de exportação de configuração em:
Administration>Configuration>Development>Configuration synchronization>Export Tab>Single itempara exportar cada uma das configurações de bloco do seu tema.
Em seguida, verifique os arquivos YAML gerados e coloque-os em uma nova pasta dentro do seu tema em /config/install. você desinstalou o tema e o reinstalou como padrão.

Resumo:
1. Instale MY_THEME
2. Coloque os blocos nas regiões desejadas
3. Exporte os arquivos de configuração e remova-os uuide o hash de configuração principal,
por exemplo Site Branding, block.block.MY_THEME_branding.ymlarquivo de bloco

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 os arquivos de configuração MY_THEME/config/optionalou o MY_THEME/config/installdiretório (se tiver certeza absoluta de que todas as dependências foram atendidas)
  2. Desinstale MY_THEMEe limpe todos os caches
  3. Reinstale MY_THEMEnovamente
Mojtaba Reyhani
fonte
7

Encontrou a resposta:

Isso pode ser feito adicionando um arquivo yml (instância de bloco) para cada bloco na theme/config/installpasta.

Por exemplo, para atribuir o Site Brandingbloco (nome da máquina system_branding_block) à Site Brandingregião (nome da máquina site_branding), adicione o seguinte código no config/install/block.block.THEME_NAME_branding.ymlarquivo:

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
fonte