УрокТемизация 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
Аватар пользователя Spleshka
Spleshka написал:

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

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

Если не хочешь делать с нуля, берешь за основу существующую

25.01.2013 17:07
Аватар пользователя unic
unic написал:

Спасибо.

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

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

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

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

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
Аватар пользователя bigferumdron
bigferumdron написал:

У меня такой вопрос: правильно ли я понимаю , что друпал автоматически создает такие регионы как:
sidebar first
sidebar second
content
header
footer
highlighted
help
page_bottom
page top

Т.е. если тебе их хватает, можно вообще в info файле ничего не добавлять связанного с regions а просто использовать эти регионы в page.tpl

НО! как только мы добавляем какой-нибудь другой регион, т.е. свой собственный, то нам тогда нужно описывать в инфо файле не только его, но и все стандартные регионы (если они нам нужны) . Т,е. либо не писать ничего и юзать стандарт, либо если уж написали, то будут работать только те, которые мы описали. ЭТО ТАК? если да, то почему?

Правда ли что регионы page_top и page_bottom обязательные?

Спасибо.

22.08.2012 01:33
Аватар пользователя freeams
freeams написал:

Хорошая и развернутая статья, автор молодец! Сей час тоже делаю проект, собираю информацию..

03.10.2012 15:17
Аватар пользователя freeams
freeams написал:

Кстати, кому нужны темы для Drupal у меня есть хорошая подборка с рабочими ссылками.
Ссылка.

03.10.2012 15:20
Аватар пользователя Samodelkin
Samodelkin написал:

Подскажите как переопределить в теме файл шаблона модуля поля, но не всего а для поля с определенным именем?

19.11.2012 17:07
Аватар пользователя sergeybelya
sergeybelya написал:

http://api.drupal.org/api/drupal/modules!field!theme!field.tpl.php/7

19.11.2012 22:18
Аватар пользователя Serge
Serge написал:

Здравствуйте. Хочу вывести страничку по определённому шаблону, где это можно изменить?

17.01.2013 21:21
Аватар пользователя Дмитрий
Дмитрий написал:

Хоть сегодня как раз год, как на вопросы этой темы перестали даваться ответы, всё же спрошу (благо, денег не возьмут))).

Где в шаблонах, темах и т.п. описывается, какую область пространства в окне браузера занимает тот или иной регион? Меня это интересует гораздо больше, чем разные переменные, про которые в учебниках пишут, и при этом не пишут самую основу!!!

22.08.2013 10:54
Аватар пользователя sergeybelya
sergeybelya написал:

Это зависит от верстки, по умолчанию регионы будут выводиться в нормальном потоке, т.е. в порядке появления их в шаблоне.

22.08.2013 11:54
Аватар пользователя Костя
12.09.2013 15:26
Аватар пользователя Макс2
Макс2 написал:

Подскажите пожалуйста- как будет выглядеть адрес нового .css фаила в sub_example.info, если new-style.css лежит в sites\all\themes\sub_example ?

06.12.2013 14:46
Аватар пользователя junothan
junothan написал:

как убрать дублирование заголовков меню при выводе меню у меня заголовки меню дублируются
также дублирование названий пунтов у которых имеются подпункты как выводить меню чтоб заголовки не дублировались друпал 7

05.10.2015 09:45
Аватар пользователя fsockopen()
fsockopen() написал:

крутой сайт у тебя.вот хотел узнать как ты такой дизайн крутой сделал)и сколько времени на это ушло?)

21.01.2016 22:36
Аватар пользователя VitaliyYanchuk
VitaliyYanchuk написал:

Еще одна статья по теме смены шаблона на Drupal 7 https://shneider-host.ru/blog/izmenenie-shablona-v-drupal-7.html

18.02.2016 18:14
Аватар пользователя Виктор
Виктор написал:

Здравствуйте! Подскажите пожалуйста,как установить код, в индекс файла.(корень сайта)
Drupal 7.10 на хостинге Hostinger? Я в этом 0, только начал. Спасибо

29.02.2016 23:30

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