Шаблоны страниц и нод в Drupal 7
Totaku включен в Рукоблудие
417 слов ~2 мин
Т.к. я до сих пор дружу с Drupal 7, но не все о нем помню и не все полезные ссылки у меня до сих пор сохранены, я бесчестно и без разрешения автора спиздил этот материал. Прости меня автор.
Страница обслуживания
maintenance-page–[offline].tpl.php
maintenance-page.tpl.php
— шаблон страницы обслуживания. Отображается когда включен режим обслуживания сайта. И часто эта страница выглядит некрасиво, если её не менять. Для этого и существует шаблон maintenance-page.tpl.php.
maintenance-page--offline.tpl.php
— шаблон страницы, отображающийся при ошибках, связанных с базой данных.
У этих двух шаблонов есть особенность — они включают в себя полную разметку HTML страницы, т.е. содержит всю страницу целиком, включая head и body.
Шаблоны нод
node–[type|nodeid]. tpl.php
Пожалуй самые используемые шаблоны, т.к. довольно часто необходимо изменить разметку для ноды или для всех нод одного типа. Например, необходимо сделать страницу товара. У товара есть поля, которые необходимо вывести в определённых местах страницы. Это можно сделать очень просто, создав шаблон для определённого типа ноды товара.
Базовый шаблон, используемый для отображения любых нод называется node.tpl.php
.
node--nodeid.tpl.php
где nodeid — ID ноды. Шаблон используется если необходимо изменить разметку конкретной ноды. Например шаблон node–1.tpl.php задает разметку для первой ноды.node--type.tpl.php
где type — тип ноды. Если необходимо указать разметку для всех нод одного типа используется этот шаблон. Например node–article.tpl.php
задаёт разметку для всех нод типа article.
Шаблоны страниц
page–[front|internal/path].tpl.php
Базовый шаблон для страниц: page. tpl.php.
page--node--edit.tpl.php
— задаёт шаблон страницы редактирования и создания ноды.page--node--1.tpl.php
— задаёт шаблон страницы для ноды с id.page--node.tpl.php
page--front.tpl.php
— очень полезный шаблон, использующийся для отображения главной страницы сайта.page--taxonomy.tpl.php
— шаблон страницы для терминов таксономииpage--taxonomy--term--1.php
— шаблон страницы для термина таксономии с tid = 1
UPD: Этим способом можно переопределить шаблон страницы Drupal, выводимой через модуль Views. Для этого нужно создать новый шаблон page--[viewurl]
, где viewurl — путь страницы. Например, для страницы http://site.ru/views-page/ нужно создать шаблон с именем page--views-page.tpl.php
.
Подробнее про шаблоны views я написал в отдельной статье: Шаблоны блоков, страниц, полей для модуля views Drupal 7.
UPD: В Drupal 7 нет стандартных шаблонов для страниц ошибок 404, 403. Так же, по умолчанию нет возможности объявить свой шаблон страницы для отпределённых типов нод. Но это легко реализуется. Как это сделать можно прочитать здесь: Создание кастомных шаблонов в теме Drupal 7.
Про шаблоны блоков, комментариев и полей вы можете почитать в соотвествующей статье: Шаблоны блоков, комментариев и полей Drupal 7.
Так же, есть очень хорошая статья (Drupal 7 Template (Theme Hook) Suggestions) на официальном сайте Drupal, где описываются еще шаблоны форума, голосований, таксономии и т.д.: Template (theme hook) suggestions.
Оригинал.
Чуть не забыл. Вы можете почитать меня в твиттере или телеграме, посмотреть мои фотографии в инстаграме, подружиться со мной в PSN, позлить меня на твиче пока я играю или посмотреть в записи. А самые лучшие человеки могут меня поддержать деньгой.
Создание своего шаблона для Drupal 7 на конкретном примере. Часть 1.
Сегодня хочу затронуть такую тему как создание собственного шаблона для Drupal 7, на конкретном примере. Этому делу, будет посвящено несколько уроков, которые я думаю помогут вам разобраться в принципах построения своего шаблона. Для опытных пользователей данной системы, допил свёрстанного дизайна под Drupal не составляет особого труда, но вот для новичков – тема сложновата и усложняется она ещё и тем, что в рунете практически нет какого либо описания построения шаблона, — есть какие то обобщённые данные, я попытаюсь устранить данный пробел своими статьями. Итак приступим:
Для начала нам необходимы исходные данные, а именно свёрстанный (HTML и CSS) шаблон. В просторах интернета их достаточно много. Я же вам предлагаю взять мои исходники, которые будут использоваться в примерах, скачать его можно вот отсюда, а выглядеть он будет вот так:
Как мы видим, структура совершенно простая. Давайте откроем папку с исходными файлами и посмотрим из чего состоит наш с вами дизайн:
Набор файлов скуден честно говоря, внутри находится индексный файл (index. html), стили (style.css), и папка с картинками (images). Теперь приступим к созданию, для начала нам нужно создать папку с названием вашего шаблона (название берём из головы) в директории вашего сайта, я назову его «modeldrupal», а именно идём по пути
sites/all/themes/название_вашего_шаблона
Внутри папки создаём файл
Название_вашего_шаблона.info
В этом файле у вас будет храниться вся необходимая информация о данном шаблоне, которая необходима для Drupal.
И пишем вот такую структуру:
name = modelDrupal description = new themes for drupal modelDrupal package = Core version = VERSION core = 7.x stylesheets[all][] = style.css
Полный список доступных значений для info файла можно прочитать вот здесь. Для того что бы данный шаблон появился в админке вашего сайта, наличие данного файла будет достаточно, давайте посмотрим, переходим в раздел оформление:
И видим, что для полного отображения нам не хватает скриншота темы, поэтому сделаем скриншот свёрстанного дизайна и поместим его в корень нашего с вами шаблона, название ему необходимо дать как:
screenshot.png
Расширение файла может мыть как «png» так и «jpg», в моём случае это – png. Обновляем страницу и смотрим что у нас из этого получилось:
Как мы видим, для него так же доступна опция «Включить и установить по умолчанию» я вам не советую этого делать, так как это приведёт лишь к белой странице. Теперь нам необходимо создать каркас нашего шаблона, который формирует index.html и повешенные на него стили, для этого копируем
Если вы читали мои предыдущие статьи по темизации, то вы наверняка знаете, что за каркас страницы в Drupal 7 отвечает файл
page.tpl.php
Поэтому, переименуем файл index.html в page.tpl.php. И теперь, если мы активируем наш шаблон в админке и поставим его по умолчанию, то вывод любой странице на сайте будет именно такой как в нашем дизайне. Давайте посмотрим как выглядит сайт после выше перечисленных манипуляций:
Видим, что не подгрузились изображения, произошло это из за того, что у нас поменялись URLы до них, давайте их перепишем, что бы наш шаблон соответствовал оригиналу, открываем файл
page.tpl.php
И в начало URL каждого изображения подставляем вот такую конструкцию, изображений у нас всего 4
/sites/all/themes/modaldrupal/
Сохраняем и смотрим, какие изменения произошли у нас на сайте:
Видим, что у нас выводится именно тот дизайн который нам необходим. В следующей части мы продолжим работу над созданием нашего шаблона.
Как создать пользовательские шаблоны Drupal для типов контента в Drupal чтобы легко создавать пользовательские страницы Drupal с новыми шаблонами и получать желаемый результат в формате HTML. Вам не нужно полагаться на какие-либо шаблоны, потому что они могут не совпадать с видением, требованиями или содержанием и расширять ограничения, установленные темами Drupal.

С самого начала при разработке темы Drupal мы предпочитали использовать собственный настраиваемый шаблон для отображения страницы/блока/поля/представления. Переопределение файла шаблона — одна из распространенных задач разработчика внешнего интерфейса, но в зависимости от используемой базовой темы не всегда понятно, как это сделать.
Большинство тем Drupal поставляются с минимум 3 файлами шаблонов по умолчанию: html.tpl.php , page.tpl.php и node.tpl.php. И многие другие файлы шаблонов, используемые для управления отображением более конкретных элементов, таких как комментарии или отдельные поля. Каждый из этих файлов можно переопределить для определенных условий, просто создав новый tpl-файл drupal в папке темы с правильным именем. Эти имена файлов называются «шаблон drupal», и существует стандартный набор этих предложений, встроенный в Drupal и указанный в документации как «Предложения шаблонов Drupal» (зацепка темы drupal).
Шаблон страницы для каждого типа контента
Наиболее распространенная и основная концепция, которой мы пользовались, заключается в том, чтобы не включать в список по умолчанию переопределение page. tpl.php, основанное на отображаемом типе контента. Существует переопределение node.tpl.php, основанное на том же условии, что приводит к путанице в отношении того, где существует переопределение страницы. Кроме того, такие темы, как Zen, добавляют этот тип переопределения в предложения шаблонов, что заставляет тех, кто использует Zen, полагать, что это часть списка по умолчанию. Проверьте документацию темы, чтобы узнать, было ли это переопределение добавлено в предложения шаблонов темой. Если его нет, вам нужно добавить его вручную.
Процесс прост. Мы можем создать дополнительные предложения шаблонов, просто добавив их в массив ‘theme_hook_suggestions’ в нашем файле template.php.
Откройте файл template.php в вашей теме для редактирования.
Найдите функцию с именем yourthemename_preprocess_page (замените yourthemename именем вашей темы).
Если эта функция уже существует, вам нужно будет добавить оператор if в конец функции непосредственно перед закрывающей скобкой. В противном случае вам нужно будет создать новую функцию, которая будет выглядеть так:
функция THEME_preprocess_page(&$variables) { if (isset($variables['node']->type)) { // Если имя машины типа содержимого "my_machine_name", файл // имя будет "page--my-machine-name.tpl.php". $variables['theme_hook_suggestions'][] = 'page__' . $переменные['узел']->тип; } }
Теперь вы можете создать файл шаблона с именем page—content-type.tpl.php , и все узлы с этим типом будут использовать новый файл шаблона.
Имя файла Примечания:
Используйте два тире после слова «страница» в имени файла.
Если ваш тип контента состоит из двух или более слов, замените знак подчеркивания (_) коротким тире (-) в имени компьютера типа контента.
С помощью page—content-type.tpl.php у нас есть возможность создать несколько макетов для каждого пакета. И в том же макете вы можете добавить дизайн/функциональность по вашему выбору.