Тема — набор файлов описывающих визуальное оформление вашего сайта.
В Drupal разделяют темы оформления на два типа:
- contrib - темы загруженные с drupal.org или иных источников, иными словами—- сторонние.
- custom - темы написанные под конкретный проект разработчиком.
Также в Drupal темы принято разделять по назначению:
- Тема оформления. Самая обычная тема оформления, которая используется для подготовки отображения сайта.
- Базовая тема. Это тоже тема оформления, но с тем лишь отличием, что она не используется напрямую для отображения страниц. Она является фреймворком или каркасом для других тем.
¶Базовые темы оформления
Практически все темы в Drupal, если не указано обратного, являются наследниками какой-то иной темы. По умолчанию, если в теме принудительно не отключено использование базовой темы, то она наследуется от stable темы, которая является темой, поставляемой ядром Drupal.
Базовая тема вызывается перед вызовом основной темы. Задача — подготовить сайт для конечной темы, которая от неё наследуется, в её задачи может входить: подготовка нужной разметки по умолчанию, добавление стилей или js файлов, первичная обработка шаблонов и hook_theme()
, отключение или переопределение различных библиотек от модулей или ядра и т.д.
Базовые темы, как правило, содержат в себе стартовый набор для создания конечной темы оформления, которая учитывает то, что происходит в базовой. Таким образом, базовая тема решает большинство задач по разметке страниц и элементов. В итоге, конечная тема оформления содержит в себе только то что необходимо: стили, картинки, необходимые для неё библиотеки и переопределения базовых темплейтов на свои, если разметка по умолчанию не устраивает.
В качестве примера можно привести популярную базовую тему Bootstrap. Она меняет разметку всех элементов Drupal на подходящую для Bootstrap фреймворка, подгружает все необходимые библиотеки и зависимости, добавляет нужные классы на нужные элементы, а также убирает ненужные и неиспользуемые, а темы, которые наследуются от неё, лишь корректируют её поведение и переопределяют шаблоны точечно. Тем самым, вам приходится делать намного меньше работы и не нужно подгонять фреймворк под Drupal.
Базовые темы бывают разные, на drupal.org практически все темы оформления являются базовыми. Вы можете найти как простые базовые темы, которые чистят всю Drupal разметку, оставляя только самое необходимое, так и те, что полностью её меняют. Вы также можете создавать свои базовые темы, точно таким же способом как создаются обычные темы.
Единственное отличие, конечная тема, как правило, указывает в своём *.info.yml файле значение base theme
с названием темы, которую она расширяет, а базовые темы, в свою очередь, либо отключают данную опцию, либо оставляют по умолчанию (наследуются от stable).
¶Местоположение тем
Темы оформления располагаются в директории /themes проекта. Drupal умеет анализировать весь проект и находить темы при любом уровне вложенности.
Примерная структура данной папки на проекте:
└─ themes/
└─ theme_name/
У данного подхода есть недостатки:
- Со временем, на реальном проекте, становится невозможным отличить contrib темы от custom тем. В связи с чем, появляются трудности с поддержкой проекта.
- При работе с VCS, вам придётся в ручном режиме отделять contrib темы от custom, чтобы они не попадали в репозиторий.
В связи с этим, в сообществе имеется best practice по работе с данной директорией. В ней создаются две дополнительные папки, в которые уже и складываются темы: contrib и custom, соответственно. Темы, которые в них находятся, должны полностью соответствовать их названиям в соответствии с типами тем оформления.
При таком подходе, структура начинает выглядеть следующим образом:
└─ themes/
├─ contrib/
│ ├─ boostrap/
└─ custom/
└─ my_theme/
Это решает множество проблем и облегчает поддержку проекта. Многие инструменты также учитывают данный best practice. Например, Composer в ядре настроен таким образом, что все темы оформления, запрошенные с drupal.org, будут автоматически устанавливаться в themes/contrib.
¶Загрузка тем
Темы оформления для Drupal, как правило, находятся на drupal.org. Для их загрузки вы можете воспользоваться страницей проекта, либо Composer.
При загрузке архива с темой, вам необходимо самостоятельно распаковать файлы темы в нужную директорию. При использовании Composer, всё будет сделано автоматически.
¶Установка (включение) тем
Для установки темы оформления, необходимо перейти на соответствующую административную страницу - "Оформление".
На данной странице вы можете включить нужную тему, а также установить её в качестве темы по умолчанию.
Drupal, по умолчанию, поддерживает две темы на выбор: административную — использующихся на всех административных страницах и по умолчанию - используемую на всех остальных страницах сайта.
Drupal также позволяет настроить очень гибкий процесс определения темы оформления, который будет использоваться при конкретных запросах и условиях. Вы можете написать свой Theme Negotiator, в котором программно сможете выбирать, какую тему и при каких условиях необходимо активировать. Например, вы можете сделать основную тему оформлению и назначить её по умолчанию для всех. Затем, вы можете сделать тему, для версии сайта "для слабовидящих", и при помощи Theme Negotiator описать, при каких условиях данная тема будет использоваться при рендере страниц.
¶Отключение тем
Если тема оформления вам больше не нужна, вы можете отключить её, нажатия соответствующей кнопки рядом с темой на странице . Данная операция находится на административной странице "Оформление".
В процессе удаления будут вызваны соответствующие события и операции, в результате которых тема оформления будет отключена, а все данные, которые были связаны с данной темой оформления (её настройки, расположения блоков в регионах), будут утеряны.
Обратите внимание на то, что удаление не влечет за собой физическое удаление файлов темы, эта задача производится в ручном режиме.
¶Удаление (файлов) темы
После того как вы отключили тему оформления, вы можете её удалить, если она больше вам не нужна.
Удаление файлов темы оформления должно производится тем же способом, который был использован для их загрузки. Если вы загружали модуль руками с drupal.org, то файлы необходимо удалять также руками, если же вы загружали зависимость при помощи Composer, то удалять необходимо его командами.