Блог Vaden Pro

Все о самостоятельном создании и продвижении сайтов

Применение шаблонов block.tpl.php для темизации блоков в Drupal 7

Раздел: 

Шаблон block.tpl.php

При работе на CMS Drupal 7 вы можете темизировать при помощи шаблонов, практически любой элемент, начиная от целой страницы, заканчивая отдельными полями. Блоки не стали исключением, для них также есть шаблон block.tpl.php и при его помощи можно подстраивать вывод блока под себя. Обычные блоки темизировать не надо, ведь внутри их можно написать любой код, а вот системные блоки или же блоки выводимые представлением не так просто изменить, но об этом чуть позже.

Какие шаблоны block.tpl.php можно использовать?

Перед началом работы с темизацией блоков стоит обратить внимание, какие существуют шаблоны.

block.tpl.php

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

Он по умолчанию встроен в друпал и его можно найти в директиве /modules/block/block.tpl.php

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

block--[регион].tpl.php

Шаблон который будет задевать все блоки находящиеся в регионе, системные названия которых можно узнать в файле с расширением .info Вашей темы. (подробнее о этом в уроке о создании своей темы)

Название регионов

Так, для того, что бы воздействовать на все блоки в Sidebar second название будет выглядеть следующим образом: block-- sidebar_second.tpl.php

block--[модуль].tpl.php

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

Узнать в ком модуле выводится шаблон можно двумя способами.

Первый это сначала использовать шаблон типа block.tpl.php, в нём вывести dpm($block);

dpm блока

На странице найти необходимый нам блок и открыв сообщение найти строчку под название module и взять значение.

Название модуля через dpm

А также можно зайти в настройки блока

Настройка блока

И он будет написан в адресной строке после /manage/..

Название модуля в адресной строке

block--[модуль]--[дельта].tpl.php

При помощи уточнения, а именно дописания [дельты], можно темизировать конкретный блок, так как [дельта] у каждого блока уникальная

Где брать название модуля мы уже выяснили, теми же способами можно узнать и название дельты, также при помощи dpm($block)

dpm модуля

И при помощи адресной строки в настройке блоке, дельта идёт следом за модулем

дельта в url

Важность шаблона

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

Главным шаблоном, который перекрывает все другие является block--[модуль]--[дельта].tpl.php.

Если он отсутствует то следом будет подключён шаблон block--[модуль].tpl.php.

Если система не найдёт вышеупомянутые шаблоны она начнёт искать block--[регион].tpl.php.

И если уже и этого шаблона нет, то будет подключен шаблон block.tpl.php.

Стоит обратить внимание, что местоположение шаблона тоже играет существенную роль, сначала будут подключены шаблоны которые находятся внутри папки текущей темы, а затем шаблоны с папки /module/… Следовательно если у вас в папке темы будет шаблон block.tpl.php то он перекроет этот же шаблон который находится в папке модуля.

Переменные

Кроме самого кода, в файле стандартного шаблона, написаны еще переменные, которые можно использовать для темизации блоков. В самом файле они разделены на «Available variables» (Доступные (Основные) переменные),

основные переменные

и «Helper variables:» (Вспомогательные переменные)

вспомогательные переменные

Рассмотрим каждые из них

$block->subject — название самого блока.

$content – содержит контентную информацию

$block->module — название модуля, который был задействован при выводе блока

$block->delta — идефикатор. Является не повторимым и содержится в каждом блоке, благодаря ему можно обращаться к конкретным блокам.

$block->region — содержит название региона в котором был выведен блок.

$block_zebra — присваивает классы odd и even, в соответствии с с чётностью элемента. Напрямую связанна с регионом в котором находится блок, следовательно исчисление идёт от первого элемента внутри региона

$zebra – делает то же что и $block_zebra, только в этом случае отсчет не привязан к региону

$block_id- содержит значения id блока, внутри определённого региона

$id- содержит значение id блока, но не привязан к региону.

Следующие переменные присваивают значение «Истина» при соблюдении условий:

$is_front — блок на главной странице

$logged_in — пользователь залогинен(авторизован) на сайте

$is_admin — авторизованный пользователь является администратором

Подключение шаблона и пример использования

Для начала нам стоит какие или какой именно блок мы будем темизировать и создать соответствующий файл. Для примера мы будем темизировать блок созданный представлением «Жанры».

Блок жанры

Для этого создадим файл с названием block--views--ganre-block.tpl.php и откроем его.

Теперь стоит перейти в дерективу module/block/ и найти там стандартный файл block.tpl.php, скопировать его содержимое и вставить в наш ново созданный шаблон блока.

И у нас должно получиться следующие.

Стандартный код

Теперь у нас есть новый шаблон для блока с жанрами, осталось его подключить, а для этого необходимо перейти в раздел конфигурация, на административной панели сайта, найти в ней подраздел «Разработка» и перейти по ссылке «Производительность».

Производительность

В открывшимся окне необходимо нажать на кнопку «Очистка кэша». После чего наш шаблон будет подключён

Кнопка очистки кэша

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

Скроем контент этого блока для незарегистрированных пользователей. Для этого мы воспользуемся дополнительными переменными, а именно $logged_in.

Пропишем наше условие и сохраним документ.

Новый код

Теперь если мы выйдем из своей учётной записи то в нашем блоке не будет выводится содержимое

Вид под анонимом

А если мы авторизуемся то содержимое блока будет выводится.

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

Вид под авторизованным пользователем

Важно

Будьте внимательны в темизации блоков, особенно при выборе шаблона, ведь в Drupal 7 вывод всего контента совершается через блоки.