Drupal6: В theme_preprocess_page (& amp; $ vars), откуда берется $ vars? (Как манипулировать хлебными крошками)
-
05-07-2019 - |
Вопрос
Я хочу удалить хлебную крошку, когда это всего лишь одна запись (" Главная "). Я нахожусь в функции моей темы theme_preprocess_page (& amp; $ vars)
. $ vars ['breadcrumb'] доступен, но это всего лишь HTML. С этим немного неуклюже работать. Я бы предпочел получить его в виде массива элементов в списке хлебобулочных изделий и сделать что-то вроде этого:
if (count($breadcrumb) == 1) {
unset($breadcrumb);
}
Откуда берется $ vars
? Как я могу переопределить код, создавший его изначально?
Решение
Массив $ vars передается между всеми функциями предварительной обработки. В случае функций _preprocess_page большинство значений в $ vars создаются в template_preprocess_page (см. http://api.drupal.org/api/function/template_preprocess_page/6 ). В этой функции вы увидите:
$variables['breadcrumb'] = theme('breadcrumb', drupal_get_breadcrumb());
Здесь drupal_get_breacrumb возвращает массив элементов breadcrumb, который затем тематически обрабатывается функцией theme_breadcrumb () (или ее переопределением).
Самый простой способ получить то, что вы хотите, это переопределить функцию theme_breadcrumb. Для этого вы берете оригинальную функцию theme_breadcrumb ( http://api.drupal.org / api / function / theme_breadcrumb / 6 ), скопируйте его в файл template.php, замените «theme» в имени функции на имя вашей темы и измените код так, чтобы он выглядел так:
function THEMENAME_breadcrumb($breadcrumb) {
if (count($breadcrumb) > 1) { // This was: if (!empty($breadcrumb))
return '<div class="breadcrumb">'. implode(' » ', $breadcrumb) .'</div>';
}
}
Для лучшего понимания переопределений тем Drupal и функций предварительной обработки см. О переопределении выводимого вывода и < a href = "http://drupal.org/node/223430" rel = "nofollow noreferrer"> Настройка переменных для использования в шаблоне (функции предварительной обработки) .