(phptemplate) Разные шаблоны для разных блоков

Главные вкладки

Аватар пользователя marazmus marazmus 22 января 2007 в 23:05

Оригинал статьи на 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 Smile

Здесь left и right - имена регионов. Так как регионы теперь (начиная с версии 4.7) можно создавать целыми батальонами и полками, то шаблонизация блоков для конкретного региона становится плевым делом - просто создайте шаблон с именем, содержащим имя нужного вам региона - как в данном примере.

Комментарии

Аватар пользователя Pozniy Pozniy 22 января 2007 в 23:22

Как жаль что нет здесь возможности клацать на пимпочку "Спасибо", как это есть на некоторых форумах, где благодарная любовь народа к авторам-коллегам приобретает зримые, "детерминированные" значения рейтинга-репутации...

Аватар пользователя marazmus marazmus 22 января 2007 в 23:45

Настоящее спасибо нужно говорить Акселю - за сам сайт drupal.ru.

Я пока занимаюсь не более чем тупым переводом кусков документации с drupal.org. Писать свои статьи не позволяет низкий уровень знаний Друпала.

p.s. Поварился немного на форумах, система репутации не понравилась - по крайней мере, на том форуме, где я в основном обитал. Люди, делающие реальное и нужное практически всему форуму дело, сидят с репутацией ниже плинтуса - в то время как мириады балаболов занимаются "накруткой репы" друг другу за "просто так".

Аватар пользователя marazmus marazmus 13 марта 2007 в 15:46

крутись в реальной жизни, в ней система репутации более качественная

Это сказано, чтобы просто сказать? Smile

Может, конкретно по статье чего-нибудь лучше сказать, улучшить понимание других посетителей в данном вопросе?

А так - нет смысла говорить, где мне крутиться, мне начхать на советы левых людей. Про реальную жизнь я тоже знаю, как ни удивительно - я в ней живу.

p.s. И чего я отвечаю на тупые комменты, хрен знает...

Аватар пользователя marazmus marazmus 20 апреля 2008 в 12:10

Ash_Ketchum wrote:
А насчёт ID блока (delta) поясните.
Это номер ноды?

Это номер блока.

Когда создается блок, ему присваивается не какой-то буквенный идентификатор, а число.

Аватар пользователя Stein Stein 22 мая 2009 в 0:53

Можно с помощью 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

Аватар пользователя Userbar Userbar 10 февраля 2010 в 15:55

"Шаблон для этого блока так и будет называться block-user-1.tpl.php"

"block-user-1" - ID блока логина (модуль "User"), если юзер с ID 1 залогинился;
"block-user-0" - ID блока логина (модуль "User"), если юзер не залогинился;

Аватар пользователя aa2ndrew@drupal.org aa2ndrew@drupal.org 21 февраля 2010 в 14:08

"Userbar" wrote:
"block-user-1" - ID блока логина (модуль "User"), если юзер с ID 1 залогинился;
"block-user-0" - ID блока логина (модуль "User"), если юзер не залогинился;

Ага, а если юзер под ID=10, то будет шаблон вида block-user-10? Smile Не верное предположение. Циферки в названиях блока говорят о номере блоков, которые генерятся этим модулем.