Создание темы оформления состоит из нескольких простых, обязательных шагов — создание папки для темы и файла *.info.yml с описанием темы. Данный процесс похож на создание собственного модуля, с некоторыми особенностями для темы.
¶Придумываем название
Первым делом необходимо придумать название будущей темы оформления. Оно будет использовано Drupal, для того чтобы взаимодействовать с вашей темой оформления. Для именования темы оформления есть определенные правила, которые нельзя нарушать:
- Название должно начинаться с буквы.
- Может содержать только латинские символы в нижнем регистре и нижнее подчеркивание.
- Не может содержать никаких пробелов.
- Не может называться одним из зарезервированных имён:
src
,lib
,vendor
,assets
,css
,files
,images
,js
,misc
,templates
,includes
,fixtures
,drupal
. - Не может называться также, как модули или темы, поставляемые ядром.
¶Создание папки
После того как придумали название темы оформления, вам нужно создать папку с данным именем в /themes/custom/my_theme_name, либо в /themes/my_theme_name.
¶Создание *.info.yml файла
В созданной папке, вам необходимо добавить *.info.yml файл, в котором описывается тема. В качестве название файла вы должны использовать машинное имя темы. Например, если вы создали папку my_theme_name, то файл должен называться my_theme_name.info.yml.
Пример содержимого файла:
name: My awesome theme
type: theme
description: 'A cuddly theme that offers extra fluffiness.'
core_version_requirement: ^9
libraries:
- my_theme_name/global-styling
base theme: classy
regions:
header: Header
content: Content
sidebar_first: 'Sidebar first'
footer: Footer
¶Структура *.info.yml файла
-
name: Название темы оформления, отображаемое в административном интерфейсе. Например
name: My awesome theme
. -
type: Тип "расширения" друпал. Может принимать одно из следующих значений: module, theme, profile. В случае тем оформления, обязательно указывать "theme". Например
type: theme
. -
core_version_requirement: (обязательно) Указывает версии ядра, с которыми совместима тема оформления. Принимает запись версий с семантическим версионированием, также, в нём можно указать множественные версии. Например:
core_version_requirement: ^8
,core_version_requirement: ^8 || ^9
,core_version_requirement: ^8.8 || ^9
. -
description: (опционально) Описание темы оформления, отображаемое на странице списка тем под названием. Например
description: The theme for my website!
. -
package: (опционально) Название группы, в которой необходимо расположить тему в административном интерфейсе. По умолчанию все темы получают значение
Custom
, вы можете указывать собственное название. Напримерpackage: Project name
. Название группы обрабатываетсяt()
, это означает, что строка будет переводимой и необходимо использовать только латинские названия. - php: (опционально) Указание минимальной версии PHP необходимой для работы модуля. Пользователи не смогут включить модуль, если версия, на которой работает сайт, не удовлетворяет данному требованию.
- libraries: (опционально) Список библиотек, которые необходимо добавлять на всех страницах темы. Аккуратно используйте данное значение. Подключать все и сразу может серьезно сказаться на производительности.
- libraries-override: (опционально) Позволяет переопределить библиотеки или специфичные для неё файлы, или выключить их работу.
- libraries-extend: (опционально) Позволяет указать какие библиотеки необходимо подключать, если на странице появилась определенная библиотека.
-
base theme: (обязательно) Позволяет указать название базовой темы, от которой будет наследоваться ваша тема. Если вы не загрузили необходимую базовую тему, рекомендуется использовать одну из стандартных:
classy
илиstable
. Вы можете полностью отключить наследование указавfalse
. Если вы до конца не понимаете данный параметр, пропустите его и продолжайте со значением по умолчанию -stable
. -
hidden: (опционально) По умолчанию значение
false
, указавtrue
, модуль не будет отображаться в списке тем оформления. Например, это хорошее решение для тем оформления с тестами или стартовых наборов тем, которые не предназначены для использования. Вы можете указать$settings['extension_discovery_scan_tests'] = TRUE
в settings.php чтобы они начали отображаться. -
engine: (опционально) Позволяет задать какой шаблонизатор использовать для данной темы. По умолчанию все темы имеют значение равное
twig
и указывать ничего не нужно. Прежде чем менять данный параметр, убедитесь что указанный вами шаблонизатор объявлен в Drupal. -
logo: (опционально) Путь до логотипа, относительно корня темы (*.info.yml). По умолчанию Drupal ищет logo.svg, но вы можете поменять это значение, например, если хотите чтобы он использовал png логотип:
logo: images/logo.png
. - screenshot: (опционально) Путь до скриншота, относительно корня темы (*.info.yml). По умолчанию Drupal попробует загрузить файл screenshot.png из корня темы. Вы можете подготовить свой файл, он должен быть в размере 588х438px. Данный скриншот показывается на странице тем оформления.
-
regions: (опционально) Список регионов темы оформления. Если вы решили задать данное значение, вы обязательно должны объявить регион content. Регионы задаются в формате
region_key: Region label
. - regions_hidden: (опционально) Список машинных имён регионов, которые необходимо удалить, если вы не указали regions и они унаследовались от base theme.
-
features: (опционально) Список настроек, которые будут доступны в форме настройки темы. Доступные значения по умолчанию:
comment_user_verification
,comment_user_picture
,favicon
,logo
,node_user_picture
. - ckeditor_stylesheets: (опционально) Список CSS файлов, которые необходимо добавить к фрейму CKEdtior.
- experimental: (опционально) Помечает тему как "экспериментальная". Для таких тем будет добавлено уведомление, как у модулей, предупреждающих о возможных проблемах.
-
dependencies: (опционально) Список модулей, от которых зависит данная тема оформления. Название зависимостей должно быть в формате
{project}:{module}
, где{project}
название проекта на drupal.org (например drupal.org/project/views - views) и{module}
машинное название модуля. Вы также можете указать каждой зависимости ограничения по версии, напримерyandex_yml:yandex_yml (>=8.x-1.x)
. -
lifecycle: (опционально) Указывает стабильность темы оформления. Может принимать одно из следующих значений:
- experimental: Что-то новое, не завершённое. Будет показано предупреждение при попытке включить подобное расширение, но оно будет работать.
- stable: (по умолчанию) Стабильное расширение, никаких дополнительных предупреждений показано не будет.
- deprecated: Что-то на пути к выводу из применения. Пользователь по-прежнему сможет устанавливать подобное расширение, но будут показываться предупреждения.
- obsolete: Поддержка прекращена. Пользователь должен удалить данное расширение. Ранее установленные расширения продолжат работать, но будет показано предупреждение. Установить данное расширение будет невозможно.
- lifecycle_link: (обязательно при lifecycle равным obsolete или deprecated) URL-адрес на документацию, где написано, что делать разработчикам и/или веб-мастерам в случае прекращения развития темы оформления.
-
starterkit: (по умолчанию
false
, Drupal 9.4.0+) Если задатьtrue
, тема будет являться «стартовой» и использована как каркас для создания новой темы. Темы помеченные какstarterkit
становятся доступны при использовании командыdrupal generate-theme --starterkit STARTER_THEME_NAME NEW_THEME_NAME
. .- Запрещенные для использования: Данные файлы могут также содержатьversion
иproject
. Данные значения добавляются в файл автоматически drupal.org, если вы публикуете модуль как полноценный проект. Для избежания проблем, не задавайте данные значение вручную.
¶Изменения в релизах
-
Drupal 9.4.0 (15.06.2022): Добавлена поддержка опции
starterkit
. -
Drupal 9.3.0 (08.12.2021): Добавлена поддержка опций
lifecycle
иlifecycle_link
в *.info.yml файле. -
Drupal 9.2.0 (02.06.2021): Темы оформления больше не могут указывать значение
major
в *.info.yml файле.
¶Ссылки
- Разработка тем оформления для Drupal 8, I am droid, 2017