Подтемы
Подтемы, как и любая другая тема, отличаются одним отличием: они наследуют ресурсы родительской темы. Нет никаких ограничений в возможностях цепочки, соединяющих подтемы с их родителями. Подтема может быть дочерней по отношению к другой подтеме, и она может быть разветвленной и организованной, как вы считаете нужным. Это то, что дает подтемам большой потенциал.
Чтобы создать подтему, определите ее как любую другую тему и объявите ее базовую тему с помощью клавиши «base theme». (Обратите внимание, что этот ключ не имеет подчеркивания.)
Пример подтемы: Fluffiness
Fluffiness - пример подтемы, которая использует Classy в качестве базовой темы.
Это структура папок, в которой вы получите следующие файлы:
themes/ └── fluffiness/ ├── fluffiness.info.yml └── fluffiness.libraries.yml
Информационный файл называется fluffiness.info.yml:
name: Fluffiness type: theme description: This is a fluffy sub theme of Classy core: 8.x # Defines the base theme base theme: classy # Defines libraries group in which we can add css/js. libraries: - fluffiness/global-styling # Regions regions: header: Header featured: Featured content: Content sidebar_first: First sidebar sidebar_second: Second sidebar footer: Footer
Включите файл fluffiness.libraries.yml, чтобы добавить css / js в группу глобальных стилей, определенную выше в разделе library: key.
global-styling: css: component: css/style.css: {}
Узнайте больше о добавлении таблиц стилей (CSS) и JavaScript (JS) в тему Drupal 8.
Если вы хотите использовать другое имя вместо «fluffiness», просто замените все вхождения «fluffiness» на свое имя («все вхождения» также включает имя папки). Например:
themes/ └── my_custom_theme/ ├── my_custom_theme.info.yml └── my_custom_theme.libraries.yml
Текст, который вы вводите в строку «name:» файла info.yml, имеет произвольную форму и не обязательно должен точно соответствовать имени файла вашей подтемы. Например, это может быть так:
name: My Custom Theme # (all the other lines omitted for brevity)
Подтема подтемы
При создании подтемы подтемы вы должны указать в качестве базовой темы подтему.
- Fluffiness: первая подтема Classy
name: Fluffiness type: theme description: This is a fluffy sub theme of Classy core: 8.x # Defines the base theme base theme: classy
- Shaved: подтема Fluffiness (подтема подтемы Classy)
name: Shaved type: theme description: This is a reduced fluff sub theme of Fluffiness core: 8.x # Defines the base theme base theme: fluffiness
Обратите внимание, что base theme: параметр - это machine name базовой темы, а имя: параметр - это описательное имя.
Наследование тематических регионов
Области темы не наследуются от указанной базовой темы. Если параметр region: оставлен пустым в файле info.yml вашей подтемы или не содержит всех областей базовой темы, то области по умолчанию в Drupal могут использоваться в качестве запасных вариантов размещения блоков в вашей подтеме. Мы настоятельно рекомендуем скопировать все области, определенные в вашей базовой теме, в файл info.yml вашей подтемы.
# Because regions are not inherited, any region including standard # Drupal regions as well as base theme regions must be defined in # the sub-theme. This example demonstrates a sub-theme that leverages # a subset of the standard Drupal regions (1), plus some custom # regions defined in the base theme (2), and finally three # "colophon"-related regions defined in this sub-theme. regions: # 1. Standard Drupal regions (also defined and used by base theme). # 2. Regions copied from base theme. # 3. Additional custom sub-theme regions. header: 'Header' # 1 primary_menu: 'Main menu' # 1 secondary_menu: 'Secondary menu' # 1 highlighted: 'Highlighted' # 1 help: 'Help' # 1 section_nav: 'Section Nav' # 2 breadcrumb: 'Breadcrumb' # 1 page_title: 'Page Title' # 2 local_tasks: 'Local Tasks' # 2 content: 'Content (Constrained)' # 1 content_fullwidth: 'Content (Edge-to-edge)' # 2 colophon_first: 'Colophon First Col' # 3 colophon_second: 'Colophon Second Col' # 3 colophon_third: 'Colophon Third Col' # 3 footer: 'Footer' # 1
Наследование размещения блоков
В Drupal 8 темы могут поставляться с папкой config/install/, где предустановленные конфигурации блоков, включая размещение в области тем, будут импортированы при включении темы. Drupal может наследовать эти конфигурации блоков и размещение областей от базовой темы, но если области темы, определенные в файле info.yml вашей подтемы, не соответствуют тем, которые доступны в базовой теме, могут произойти непредсказуемые размещения в случайных областях.
Наследование блочных шаблонов
Если у расширяемой темы есть настраиваемые шаблоны блоков, они не будут немедленно унаследованы, поскольку подтема создает копии всех блоков в родительской теме и переименовывает их с именем подтемы в качестве префикса. Шаблоны блока Twig получены из имени блока, поэтому это нарушает связь между этими шаблонами и их блоком. Исправление этой проблемы в настоящее время требует ловушки в подтеме. Следуя приведенным выше примерам, мы создадим файл с именем shaved.theme в каталоге подтемы. В этот файл вставьте этот hook.
/** * Implements hook_theme_suggestions_HOOK_alter for blocks. */ function shaved_theme_suggestions_block_alter(&$suggestions, $variables) { // Load theme suggestions for blocks from parent theme. foreach ($suggestions as &$suggestion) { $suggestion = str_replace('shaved_', 'fluffiness_', $suggestion); } }
Для ваших собственных подтем замените «shaved» названием своей подтемы, а «fluffiness» - названием вашей базовой темы.
Отличия от Drupal 7
Наиболее заметное отличие от Drupal 7 состоит в том, что файлы .info стали файлами .info.yml, которые используют синтаксис YAML.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.