Добавление пользовательской изменяемой переменной в theme_preprocess_page - PullRequest
2 голосов
/ 22 февраля 2011

Я перечитывал документы снова и снова, пытаясь обернуть голову вокруг этой, казалось бы, простой задачи.По сути, у меня есть шаблон с div 'skip navigation', жестко запрограммированный в html.tpl.php, который я не хочу на первой странице.

Моя идея состояла в том, чтобы установитьПеременная $ vars ['skiplink'] в theme_preprocess_page.Поскольку эта переменная содержит несколько строк HTML-разметки, я стремился к чему-то, что видно из темы гирлянды:

function garland_preprocess_page(&$vars) {
  // Move secondary tabs into a separate variable.
  $vars['tabs2'] = array(
   '#theme' => 'menu_local_tasks',
   '#secondary' => $vars['tabs']['#secondary'],
  );

 <snip>

Я хотел бы иметь HTML в Themable функции или даже в шаблоне, но я не могудаже заставить этот фрагмент работать:

/**
 * Override or insert variables into the page template.
 */
function morin_preprocess_page(&$vars) {
  // add skiplink markup
  $vars['skiplink'] = 'hello world';
 }

Это генерирует уведомление:

Примечание: неопределенная переменная: пропустить ссылку в include () (строка 14 в / var / dev / morin/www/sites/all/themes/morin/templates/html.tpl.php).

Кто-нибудь может дать мне подсказку?Мне бы очень хотелось понять, как это сделать с помощью обоих методов (шаблон и функция).Мне также интересно, должно ли это быть сделано в модуле?

Я понимаю, что есть, вероятно, 10 способов обшарить эту кошку, поэтому любые идеи о плюсах / минусах используемых методов приветствуются.

Хорошо, я понял, что использую неправильную функцию препроцесса, установка $ vars ['skiplink'] в preprocess_html - это путь к переменным верхнего уровня. Мне все еще предстоит ясно определить, как связать эту переменнуюв файл шаблона.

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Крюки препроцесса следуют этой схеме:

<theme name>_preprocess_<template name>

Так что, если вы хотите изменить переменные для "html.tpl.php", вы хотите использовать этот хук:

<theme name>_preprocess_html(&$variables)
0 голосов
/ 22 февраля 2011

Вы используете preprocess_page, но вы вставляете переменную в html.tpl.php.

Вы должны либо вставить его в page.tpl.php, либо переименовать функцию предварительной обработки, чтобы добавить переменную в html.tpl.php

И не забудьте очистить кеш, если у вас уже не была определена функция предварительной обработки.

Обновление:
Вы, кажется, упускаете ключевой момент. Функции предварительной обработки (наряду с фактическим вызовом темы) - это то, как вы делаете переменные доступными в шаблонах. Для разных шаблонов вызываются разные функции препроцессора (..._page для page.tpl.php и т. Д.)

У вас все еще есть проблемы после использования правильной функции предварительной обработки и очистки кэша?

...