Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
05/05/2020, by maria
Подтемы, как и любая другая тема, отличаются одним отличием: они наследуют ресурсы родительской темы. Нет никаких ограничений в возможностях цепочки, соединяющих подтемы с их родителями. Подтема может быть дочерней по отношению к другой подтеме, и она может быть разветвленной и организованной, как вы считаете нужным. Это то, что дает подтемам большой потенциал.

Чтобы создать подтему, определите ее как любую другую тему и объявите ее базовую тему с помощью клавиши «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.

Source URL:

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.