Drupal6: В theme_preprocess_page (& $ vars) откуда берется $ vars? (Как манипулировать хлебными крошками) - PullRequest
2 голосов
/ 10 сентября 2009

Я хочу удалить хлебную крошку, когда это всего лишь одна запись («Домой»). Я в функции моей темы theme_preprocess_page(&$vars). $ vars ['breadcrumb'] доступен, но это всего лишь HTML. С этим немного неуклюже работать. Я бы предпочел получить его как массив элементов в списке хлебных крошек и сделать что-то вроде этого:

if (count($breadcrumb) == 1) {
    unset($breadcrumb);
}

Откуда берется $vars? Как я могу переопределить код, создавший его изначально?

1 Ответ

1 голос
/ 06 января 2010

Массив $ 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 и функций предварительной обработки см. О переопределении выводимых результатов и Настройка переменных для использования в шаблоне (функции предварительной обработки) .

...