Создание под-темы для Drupal 7

Подтема (суб-темы, sub-theme, подтема) это обычная тема Drupal с одним отличием: они наследуют все ресурсы родительской темы. Подтема может наследоваться от другой подтемы, может быть организована так, так Вы посчитаете нужным. Это даёт подтемам огромный потенциал.

Представьте себе: Вы разрабатываете главную тему-каркас, а потом, с помощью подтем меняете необходимые детали. Потом создаёте еще одну подтему для другого проекта, делая некоторые изменения, например в CSS и регионах, всё от той же главной темы. С подтемами много дизайнерских ресурсов могут быть общими. Изменяя что-то в главной теме, это меняется и подтемах. С хорошей и продуманной организацией главной и её подтем Ваши возможности неограничены.

Создание подтемы Drupal 7

Каждая подтема должна находиться в отдельной папке. Чтобы объявить тему как подтему к какой то базовой необходимо изменить файл .info подтемы. Добавьте слудеющую строку в файл .info подтемы (имя родительской темы обычно пишется строчными буквами):

base theme = theme_name

Как уже было сказано, подтема будет наследовать большинство параметров родительской темы. Исключениями являются регионы, версия ядра и информация о цвете. Поэтому, если необходимо чтобы в подтеме были такие же регионы как у главной темы, необходимо скопировать объявления регионов из .info файла главной темы. Так же и с цветами. Если Вы хотите, чтобы дочерняя тема поддерживала модуль настройки цвета, то нужно скопировать строчку из главной темы:

stylesheets[all][] = color/colors.css

затем скопировать файл colors.css из основной темы в Вашу подтему.

Наследование таблиц стилей (CSS)

Все файлы стилей из родительской темы будут использованы в создаваемой подтеме, пока в этой подтеме есть хобя бы один подключенный свой файл стилей. Другими словами, Вы должны подключить хотя бы один собственный файл стилей для подтемы, чтобы она смогла унаследовать стили родительской.

Переопределение наследуемых стилей: подключите к подтеме файл стилей с таким же названием. Например, чтобы переопределить style.css, наследуемый из родительской темы, необходимо в info файл подтемы добавить следующую строку:

stylesheets[all][]   = style.css

Ну и, конечно, создать этот файл в папке с подтемой. Если оставить файл style.css в подтеме пустым, то стили из главной темы всё равно не будут использоваться в дочерней.

Наследование JavaScript

Все файлы скриптов, указанные в главной теме, так же, как и с CSS стилями, будут унаследованы для дочерней.

Переопределение скриптов: укажите файл скриптов в подтеме с таким же названием. Например для переопределения файла script.js необходимо в файл .info подтемы добавить следующую строку:

scripts[] = script.js

Затем необходимо создать файл script.js. Оставьте этот файл пустым чтобы не использовать наследуемые скрипты из родительской темы.

Наследование функций из файла template.php

Всё что написано в файле template.php главной темы будет унаследовано для дочерней, включая функции переопределения, функции предварительной обработки и остальное. Помимо этого, каждая подтема может иметь свой файл template.php, в котором будут переопределены и объявлены новые функции.

Всего имеется 2 вида функций в template.php:

  • функции переопределения (theme function overrides)
  • функции предварительной обработки (preprocess functions).

Система шаблонов Drupal 7 обрабатывает эти функции по-разному.

Функции темы, объявленные через (’[hook]’, $var, ...). Когда подтема переопределяет функцию темы, переопределяется и функция в родительской теме.

С другой стороны, функции предварительной обработки вызываются перед обработкой tpl файлов. Например, [theme]_preprocess_page вызывается перед обработкой page.tpl.php. В отличие от функций темы, функции предварительной обработки не непеопределяются в подтемах. Вместо этого функция предварительной обработки сработает сначала у главной темы, затем у дочерней.

Наследование Page, node, block и других шаблонов (.tpl.php)

Drupal поддерживает большое количество файлов шаблонов, которые могут наследоваться в подтемах. С помощью указания специального имя файла и/или структуры можно наследовать или переопределять шаблоны.

В Drupal 7 любой файл шаблона .tpl.php будет унаследован. Вы можете добавить файлы шаблонов конкретнее - node--blog.tpl.php будет показан на основе унаследованного node.tpl.php. Подробнее об именовании шаблонов страниц в Drupal 7.

Переопределение унаследованных файлов шаблонов .tpl.php: добавьте файл шаблона с тем же именем в папке подтемы, и он переопределит шаблон из родительской темы.

Наследование скриншота, логотипа и favicon

Скриншот из главной темы будет унаследован и в дочерних. Родительский логотип (logo.png/logo.jpg) и favicon не наследуются.

Чтобы переопределить скриншот, укажите новый файл изображения в файле .info Вашей подтемы.

Наследование регионов

Подтемы не наследуют регионы родительской темы. Необходимо скопировать регионы из .info файла главной темы. Обратите внимание на то, чтобы в подтеме присутствовали все файлы шаблоны, которые объявлены в .info.

Наследование цветов и настроек темы

Поддержка модуля настройки цвета не наследуется в подтемах.

Собственные настройки родительской темы так же не наследуются в дочерние.