APIDrupalDrupal API 7

Правильное создание переменных для шаблонов в Drupal.

В сегодняшней статье я продолжу рассматривать функции Drupal API 7 по работе с переменными. В предыдущей статье я рассказал о функциях variable_set и variable_get. Эти функции помещают переменные в служебную БД для дальнейшей работы с ними и работают, по большому счёту, аналогично суперглобальным массивам типа $_SESSION.
А что если нам нужно определить переменные до загрузки и поместить их в определенную часть шаблона?
В 7 версии CMS Drupal существует три типа шаблонов для создания страницы целиком (не учитывая блоков) : html.tpl.php, page.tpl.php и node.tpl.php. Первый отвечает за страницу «целиком» (meta и прочая лабуда), второй — больше за содержимое статической части в , третий — за содержимое того, что мы правим в CMS.

В соответствии с архитектурой Drupal не стоит помещать логику в файлы шаблонов. Для этого существует файл template.php в корне темы, который и отвечает за предварительную обработку данных до загрузки страницы. С ним-то мы и поработаем.

Функция, создающая переменные выглядит так:

function _preprocess_(&) {
    //то, что будет делаться
  } 

Здесь template-name — это имя шаблона, в который будут загружаться переменные, tpl-name — имя файла-шаблона (html, page или node), var-array — массив переменных. Да-да, все переменные будут храниться в массиве.

Для того, чтобы объявить переменную, внутри функции напишем примерно такой код:

$[''] = ;

То есть, в массив «кладём» какое-то значение. Теперь мы можем вызвать эту переменную в том шаблоне, который был указан в tpl-name. Вызов будет производиться просто: $variable.

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

function template_preprocess_page(&$variables) {
    $variables['var1'] = 10;
  } 

А вызвать в шаблоне page.tpl.php её можно просто как $var1.

ЗАМЕЧАНИЕ: в некоторых темах с вызовом функций есть некоторые особенности. Скажем, в стандартной теме Drupal 7 Bartik переменные в шаблон page.tpl.php объявляются в функции bartik_process_page. Вызов в самом шаблоне происходит по указанному принципу.

Вот и все! Безошибочного кода Вам!

Правильное создание переменных для шаблонов в Drupal.: 2 комментария

  1. Подскажите пожалуйста, можно ли как-то сделать переменную из php вставки к конкретному ноду видимой в шаблоне? В php вставке я формирую массив $games и хочу его вывести в шаблоне конкретного нода, но этот массив в шаблоне не виден. Как получить к нему доступ в шаблоне?

    1. Разумеется, можно. Нужно добавить этот массив как вложенный к элементу массива $variables. Например $variables[‘games’] = array();
      После этого массив станет доступен в шаблоне как переменная с именем $games.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *