Програмно показване на блок в Drupal, Сергей Беляев

Задачата е да се покаже всеки блок в шаблона page.tpl.php, без да се поставя в региона

В повечето случаи, когато създавате сайт на Drupal, стандартната функционалност е достатъчна, за да създадете блок и да му зададете регион в секцията admin/structure/block. Понякога обаче възниква задачата да се покаже един и същ блок в различни области на оформлението на сайта, например в заглавката на главната страница и в страничната колона или долния колонтитул на вътрешните страници. Разбира се, можете да създадете няколко еднакви блока и да им зададете различни региони и настройки за показване на определени страници. Но ако съдържанието в тези блокове трябва да бъде променено, тогава това води до необходимостта да се редактира не един, а два или повече блока.

Първият начин е да покажете блока заедно с обвивката и заглавието

Този метод ви позволява да получите и покажете пълния html код на блока в шаблона (според шаблона block.tpl.php). На мястото на page.tpl.php, където искате да покажете блока, поставете кода:

Вместо MODULE_NAME заместваме името на модула, с който е създаден блокът - ако сте добавили блока в секцията "Структура - Блокове", това е блок. След това трябва да разберете делта параметъра на блока. Ако проверите кода на блока, например във Firebug, ще намерите неговия id във формата block-block-1. В този случай делтата на блока е 1. Делта параметърът далеч не винаги е число; ако модулът е създаден, например, с помощта на модула за изгледи, тогава неговата делта ще бъде във формата „новинен блок“). И така, за блок с id block-block-1 горният код ще изглежда така:

Вторият начин е да се покаже само съдържанието на блока

Не винаги е необходимо да извеждаме обвивката и заглавката на блока. Например, за формуляр за търсене, можем да направим без тях. В този случай използваме функцията module_invoke() на Drupal API:

И двата метода могат да се прилагат без директно поставяне на кода в шаблона, а като първо се добави променлива от html блока към page.tpl.php с помощта на функцията template_preprocess_page. Можете да прочетете как да добавите променлива към тази функция например тук.