2

当它只是一个条目(“主页”)时,我想删除面包屑。我在我的主题的theme_preprocess_page(&$vars)功能。$vars['breadcrumb'] 可用,但它只是 HTML。这有点笨拙。我宁愿将它作为面包屑列表中的一组项目,并执行以下操作:

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

从哪里来$vars?如何覆盖最初创建它的代码?

4

1 回答 1

1

$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_breadcrumb 返回一个面包屑元素数组,然后由 theme_breadcrumb() 函数(或其覆盖)进行主题化。

获得所需内容的最简单方法是覆盖 theme_breadcrumb 函数。为此,您使用原始的 theme_breadcrumb 函数(http://api.drupal.org/api/function/theme_breadcrumb/6),将其复制到您的 template.php 中,将函数名称中的“主题”替换为您的主题并更改代码,使其看起来像这样:

function THEMENAME_breadcrumb($breadcrumb) {
  if (count($breadcrumb) > 1) { // This was:  if (!empty($breadcrumb))
    return '<div class="breadcrumb">'. implode(' » ', $breadcrumb) .'</div>';
  }
}

要更好地理解 Drupal 主题覆盖和预处理函数,请参阅关于覆盖主题输出设置用于模板的变量(预处理函数)

于 2010-01-05T22:48:28.640 回答