Как назначить блоки для определенных регионов при установке темы?

9

Drupal 8 предоставляет некоторые блоки по умолчанию. Например. Site Branding, Main Navigation, Powered by Drupal, И Searchт.д.

Я создал тему, в которой есть Site branding& Main Navigationназванные регионы, в которые могут быть помещены соответствующие блоки.

Когда я запускаю мою тему, Site Brandingи Main Navigationблоки размещаются в Header& First Sidebarобласти моей темы по умолчанию , соответственно.

Как я могу разместить Site Branding& Main Navigationблоки в соответствующих регионах по умолчанию при установке темы?

kmdhrm
источник
2
Вы должны создать экземпляры блоков, которые являются объектами конфигурации, и поместить их в каталог config / install вашей темы.

Ответы:

8

Прежде всего, вы должны вручную изменить каждую нужную область блока, Administration>Structure>Block layout Tabа затем перейти к функции экспорта конфигурации по адресу:
Administration>Configuration>Development>Configuration synchronization>Export Tab>Single itemэкспортировать все настройки блока для вашей темы.
Затем вы должны взглянуть на сгенерированные файлы YAML и поместить их в новую папку в вашей теме /config/install. Затем вы удалили тему, а затем переустановили ее по умолчанию.

Сводка:
1. Установите MY_THEME
2. Поместите блоки в нужные регионы
3. Экспортируйте файлы конфигурации и удалите из них uuidхеш конфигурации ядра,
например файл Site Brandingблокаblock.block.MY_THEME_branding.yml

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. Поместите файлы конфигурации в каталог MY_THEME/config/optionalили MY_THEME/config/installкаталог (если вы абсолютно уверены, что все зависимости соблюдены)
  2. Удалите MY_THEMEи очистите все кэши
  3. Переустановите MY_THEMEснова
Мойтаба Рейхани
источник
7

Нашел ответ:

Это можно сделать, добавив файл yml (экземпляр блока) для каждого блока в theme/config/installпапке.

Например, чтобы назначить Site Brandingблок (имя машины system_branding_block) Site Brandingрегиону (имя машины site_branding), добавьте в config/install/block.block.THEME_NAME_branding.ymlфайл следующий код :

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
источник