УрокТемизация Drupal 7. Обзор файлов темы (шаблона)
Я уже давно грозился, и, наконец, решился написать серию статей по темизации для Drupal 7. Итак, для начала я опишу все файлы в Drupal 7, которые необходимы для создания собственной темы.
Тема представляет из себя набор файлов, которые определяют уровень представления (внешнего вида) сайта. К каждой теме вы можете создать одну или несколько подтем (саб-тем). Для того, чтобы Друпал обнаружил вашу тему, достаточно лишь наличия .info файла (файл с описанием темы), однако в таком случае пользы от вашей темы будет немного :)
Ниже приведён рисунок, который отражает "анатомию" темы в Друпале. Обратите внимание на цвет перед именем шаблона и цвет на макете сайта: наглядно показано какой шаблон за какую часть сайта отвечает. Например, html.tpl.php включает в себя разметку полной html страницы (DOCTYPE, <head>, <body>), а page.tpl.php отвечает за вывод содержимого (внутри тэга <body>). На рисунке показана тема с названием example.

.info файл (обязателен)
Как я уже говорил - всё, что нужно Друпалу, чтобы найти тему - это .info файл. Здесь могут быть описаны файлы стилей (css), javascript, метаданные, блоки. Именно могут быть описаны, но не являются обязательными. О том, что является в .info файле обязательным для заполнения, я расскажу в следующей статье.
Этот файл описывает имя темы, которое будет видно при работе с сайтом, а так же имя файла, которое будет использоваться для вызова функций темы (опять же - об этом чуть позже). Например, если .info файл назвать themename.info, а внутри файл указать name = Theme Name, то на сайте эта тема будет названа именно Theme Name, но в качестве имени темы для функций должно использоваться themename.
Файлы шаблонов (.tpl.php)
Эти шаблоны используются для (X)HTML разметки и вывода PHP переменных. В некоторых случаях они могут использоваться для вывода других типов данных, например, XML или RSS. Каждый файл.tpl.php управляет выводом определённой части (темизируемых) данных. В некоторых случаях шаблоны могут перекрывать друг друга при помощи системы возможных вариантов отображения данных (suggestions).
Присутствие каждого файла шаблона в теме необязательно. Отсутствие шаблона приведёт лишь к использованию его стандартного прототипа из ядра Drupal 7. Огромная просьба - никогда не пишите в этих файлах объёмные фрагменты php кода. Для этого есть template.php. Файлы шаблонов должны оставаться лишь файлами шаблонов, а никак не слоем для реализации какой-либо логики.
Для того, чтобы Drupal понял, что необходимо использовать шаблон из темы, а не из ядра, достаточно скопировать его в корень темы и сбросить кэш регистра темы. В этом может помочь Drush либо Admin menu. Если не хотите разбираться с дополнительным функционалом - просто очистите кэш всего сайта.
Вообще, кэш регистра темы необходимо очищать в следующих ситуациях:
- При добавлении новых функций Друпала в template.php
- При изменении файла .info
- При добавлении/удалении шаблонов .tpl.php
template.php
Данный файл используется как площадка для написания php кода. Здесь необходимо описывать всю логику темы. Файл template.php не является обязательным, однако в большинстве тем он всё же присутствует как минимум для предварительной обработки данных, или создания новых переменных для файлов шаблонов .tpl.php.
Неважно, что именно вы пишете - свои функции, или перекрываете функции темы - всё это должно находиться в template.php. Файл начинается с открывающегося тэга <?php. Однако использовать закрывающий тэг ?> не рекомендуется по причинам возможных ошибок php.
Подтемы (саб-темы)
По сути, подтема - эта обычная тема, но она использует файлы какой-либо другой темы. Для того, чтобы созать подтему, необходимо в .info файле указать родительскую тему, файлы которой также будут подключены к сайту. Друпал позволяет создавать подтемы на основе других подтем - т.е. создавать иерархию из тем.
Остальные файлы
- Обычно в теме присутствуют логотип, скриншот и фавиконка. Эти графические элементы не являются обязательными, но очень рекомендуются для добавления в тему, особенно, если эта тема выкладывается на drupal.org. Скриншот показыватся при выборе темы, и является крайне удобным для наглядного ориентирования между ними. Из личного опыта добавлю, что сайты без фавиконки некоторыми людьми не признаются качественно сделанными, какой бы суперфункционал они не имели.
- В теме может находиться файл theme-settings.php, который используется программистами для добавления дополнительных настроек темы. Например, отличный пример добавления настроек можно посмотреть в теме Pixture Reloaded на странице /admin/appearance/settings/pixture_reloaded
- SplasH
- 12.10.2011
- 12378
Комментарии
Очень интересует вопрос про суб темы, а именно: В чем заключается основное назначение суб тем?
Назначения, наверное, никакого. Просто есть возможность использовать функционал базовой темы, доделав при этом что-нибудь своё. В таком случае можно будет базовую тему обновлять (скачивать новые релизы с д.орга) без потери работоспособности сайта.
Спасибо.
Было бы интересно еще разобраться во внутреннем механизме темизации. То есть, каким именно образом используются шаблоны.
А подтемы нужны, чтобы, используя существующие наработки, создать свою тему. Меньше трудозатраты. Одна из самых известных базовых тем - Zen. А вот ту же Pixture Reloaded можно довольно сильно изменять, пользуясь лишь ее настройками.
Я буду писать об этом в следующих статьях
Интересует ещё такой вопрос, опять же по поводу субтем, эти темы могут содержать свои шаблоны и template.php или же они используют шаблоны из своей родительской темы, и изменять их можно только путем css?
Свои. Подтемы почти ничем не отличаются от обычных тем.
спасибо! Локанично и наглядно. узнал про html.tpl.php в 7 ке!!
Подскажите плз, а что за капча на вашем сайте?
Заранее благодарен!
Спасибо. А вот еще вопрос: тема на 960gs?
Просто я с друпалом дело не имел раньше и думаю с чего начать.
Так пока на Омегу посматриваю, может посоветуете.
Явно нет .
Омега - кошмар )
Я создаю с нуля , раньше сидел на .
Кстати , раз уж разговор пошел о темах , оцените
Тема drupalace конечно очень даже. Большое спасибо за труды.
Комментировать