Оригинал статьи на drupal.org.
Начиная с версии 5.0 Друпал позволяет создавать множество разных шаблонов для конкретных блоков. Отображение блока можно задавать в зависимости от имени модуля, региона (в котором расположен блок) и ID блока (delta).
Когда происходит отрисовка блоков, система шаблонов ищет шаблоны для каждого блока в таком порядке:
* block-[module]-[delta].tpl.php
* block-[module].tpl.php
* block-[region].tpl.php
* block.tpl.php
Наибольшее значение (вес) имеет связка “имя модуля + ID блока”. Если такого шаблона нет, будет иметь значение шаблон, содержащий просто имя модуля (который сформировал этот блок). При отсутствии такого шаблона будет произведен поиск по имени региона. И лишь в конце, если ни один вариант не найден - будет использован стандартный шаблон для всех блоков.
Простой пример.
Нам нужно, чтобы блок логина (ввода имени и пароля пользователя) был отображен совершенно по-другому, чем остальные блоки.
Все, что нам нужно сделать - сформировать код шаблона и правильно его назвать.
Наиболее точный результат будет достигнут, если мы назовем наш файл шаблона как block-user-0.tpl.php. Блок логина формируется модулем user, поэтому мы упомянули имя модуля в имени нашего шаблона. Также мы знаем, что наш блок логина сформирован с ID == 0, поэтому мы указали в имени шаблона также ID нашего блока.
Если такой блок у нас один (обычно это так и бывает, в случае с блоком логина), то достаточно назвать шаблон просто block-user.tpl.php - без указания ID блока.
Еще один пример.
Гениальная идея пришла к вам за утренней чашкой чая. Почему бы не раскрасить блоки левой стороны в ядовито-зеленый цвет, а блоки правой - в кричаще-оранжевый цвет? Сказано - сделано.
Просто сделайте два шаблона для блоков - с именами block-left.tpl.php и block-right.tpl.php. Теперь осталось задать проставить классы в шаблонах и задать наши гениальные цвета в CSS
Здесь left и right - имена регионов. Так как регионы теперь (начиная с версии 4.7) можно создавать целыми батальонами и полками, то шаблонизация блоков для конкретного региона становится плевым делом - просто создайте шаблон с именем, содержащим имя нужного вам региона - как в данном примере.
Комментарии
Как жаль что нет здесь возможности клацать на пимпочку "Спасибо", как это есть на некоторых форумах, где благодарная любовь народа к авторам-коллегам приобретает зримые, "детерминированные" значения рейтинга-репутации...
Настоящее спасибо нужно говорить Акселю - за сам сайт drupal.ru.
Я пока занимаюсь не более чем тупым переводом кусков документации с drupal.org. Писать свои статьи не позволяет низкий уровень знаний Друпала.
p.s. Поварился немного на форумах, система репутации не понравилась - по крайней мере, на том форуме, где я в основном обитал. Люди, делающие реальное и нужное практически всему форуму дело, сидят с репутацией ниже плинтуса - в то время как мириады балаболов занимаются "накруткой репы" друг другу за "просто так".
крутись в реальной жизни, в ней система репутации более качественная
крутись в реальной жизни, в ней система репутации более качественная
Это сказано, чтобы просто сказать?
Может, конкретно по статье чего-нибудь лучше сказать, улучшить понимание других посетителей в данном вопросе?
А так - нет смысла говорить, где мне крутиться, мне начхать на советы левых людей. Про реальную жизнь я тоже знаю, как ни удивительно - я в ней живу.
p.s. И чего я отвечаю на тупые комменты, хрен знает...
спасибо за перевод.
Спасибо.
Прошёлся поиском по сайту ибо встала именно такая задача. Первое (phptemplate) Перекрытие стандартных шаблонов своими ...., а второе это.
Супер!
То, что нужно.
Спасибо на добром слове
Ждем PVasili ![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
А насчёт ID блока (delta) поясните.
Это номер ноды?
Это номер блока.
Когда создается блок, ему присваивается не какой-то буквенный идентификатор, а число.
Блин, почему нельзя просто
block-[region]-[delta].tpl.php или block-[region]-[number].tpl.php ?
А как узнать номер блока?
Вот например, через Вьювс создано пять или шесть блоков, как узнать у какого какой номер?
Можно с помощью firebug заглянуть в html код и увидеть id дива, с которого начинается блок.Например
<div id="block-user-1" class="block block-user region-even even region-count-2 count-2">
Шаблон для этого блока так и будет называться block-user-1.tpl.php
"Шаблон для этого блока так и будет называться block-user-1.tpl.php"
"block-user-1" - ID блока логина (модуль "User"), если юзер с ID 1 залогинился;
"block-user-0" - ID блока логина (модуль "User"), если юзер не залогинился;
Ага, а если юзер под ID=10, то будет шаблон вида block-user-10?
Не верное предположение. Циферки в названиях блока говорят о номере блоков, которые генерятся этим модулем.