В сегодняшней статье я продолжу рассматривать функции Drupal API 7 по работе с переменными. В предыдущей статье я рассказал о функциях variable_set и variable_get. Эти функции помещают переменные в служебную БД для дальнейшей работы с ними и работают, по большому счёту, аналогично суперглобальным массивам типа $_SESSION.
А что если нам нужно определить переменные до загрузки и поместить их в определенную часть шаблона?
В 7 версии CMS Drupal существует три типа шаблонов для создания страницы целиком (не учитывая блоков) : html.tpl.php, page.tpl.php и node.tpl.php. Первый отвечает за страницу «целиком» (meta и прочая лабуда), второй — больше за содержимое статической части в
В соответствии с архитектурой 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 комментария
Подскажите пожалуйста, можно ли как-то сделать переменную из php вставки к конкретному ноду видимой в шаблоне? В php вставке я формирую массив $games и хочу его вывести в шаблоне конкретного нода, но этот массив в шаблоне не виден. Как получить к нему доступ в шаблоне?
Разумеется, можно. Нужно добавить этот массив как вложенный к элементу массива $variables. Например $variables[‘games’] = array();
После этого массив станет доступен в шаблоне как переменная с именем $games.