УрокТемизация Drupal 7. Обзор файлов темы (шаблона)

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

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

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

theme7_anatomy.png

.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

Комментарии

Аватар пользователя Тайный поклонник
Тайный поклонник написал:

Очень интересует вопрос про суб темы, а именно: В чем заключается основное назначение суб тем?

13.10.2011 01:31
Аватар пользователя SplasH
SplasH написал:

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

13.10.2011 01:48
Аватар пользователя unic
unic написал:

Спасибо.

Было бы интересно еще разобраться во внутреннем механизме темизации. То есть, каким именно образом используются шаблоны.

А подтемы нужны, чтобы, используя существующие наработки, создать свою тему. Меньше трудозатраты. Одна из самых известных базовых тем - Zen. А вот ту же Pixture Reloaded можно довольно сильно изменять, пользуясь лишь ее настройками.

13.10.2011 09:32
Аватар пользователя SplasH
SplasH написал:

Я буду писать об этом в следующих статьях

13.10.2011 13:18
Аватар пользователя Тайный поклонник
Тайный поклонник написал:

Интересует ещё такой вопрос, опять же по поводу субтем, эти темы могут содержать свои шаблоны и template.php или же они используют шаблоны из своей родительской темы, и изменять их можно только путем css?

13.10.2011 10:28
Аватар пользователя unic
unic написал:

Свои. Подтемы почти ничем не отличаются от обычных тем.

13.10.2011 10:30
Аватар пользователя pashen
pashen написал:

спасибо! Локанично и наглядно. узнал про html.tpl.php в 7 ке!!

14.10.2011 21:12
Аватар пользователя Михаил
Михаил написал:

Подскажите плз, а что за капча на вашем сайте?
Заранее благодарен!

29.12.2011 09:30
Аватар пользователя ice
ice написал:
29.12.2011 09:44
Аватар пользователя Михаил
Михаил написал:

Спасибо. А вот еще вопрос: тема на 960gs?
Просто я с друпалом дело не имел раньше и думаю с чего начать.
Так пока на Омегу посматриваю, может посоветуете.

29.12.2011 14:42
Аватар пользователя ice
ice написал:

Явно нет .

Омега - кошмар )

Я создаю с нуля , раньше сидел на genesis .

Кстати , раз уж разговор пошел о темах , оцените drupalace

29.12.2011 14:52
Аватар пользователя Михаил
Михаил написал:

Тема drupalace конечно очень даже. Большое спасибо за труды.

30.12.2011 10:24

Комментировать

                                                                      
888b 88 ad888888b, ad88888ba 88 8888888888
8888b 88 d8" "88 d8" "88 88 88
88 `8b 88 a8P 8P 88 88 88 ____
88 `8b 88 ,d8P" Y8, ,d88 88 88a8PPPP8b,
88 `8b 88 a8P" "PPPPPP"88 88 PP" `8b
88 `8b 88 a8P' 8P 88 d8
88 `8888 d8" 8b, a8P 88, ,d88 Y8a a8P
88 `888 88888888888 `"Y8888P' "Y8888P" "Y88888P"

Enter the code depicted in ASCII art style.