Drupal 6:你如何打印分类术语作为CSS Body Class?

时间:2010-10-18 12:18:15

标签: drupal-6

在Drupal 6中,如何将分类术语打印为CSS body class?

我发现这个片段可以让你几乎将Drupal内容的每个方面打印成一个正文类,但它不包括分类术语:

http://www.davidnewkerk.com/book/122

能够将分类术语作为一个体类打印对于主题过程至关重要,因此我很惊讶解决方案并不容易获得。

2 个答案:

答案 0 :(得分:0)

通过在页面预处理功能中执行print_r($vars)dpm($vars)或使用http://drupal.org/project/devel_themer模块,检查传递给页面模板的变量。 dpm的使用要求您安装devel模块。

您会发现某些主题会将$taxonomy作为变量传递给page.tpl.php。如果不是这种情况,您可以在$node变量中找到分类术语,这些变量在某些主题的page.tpl.php中也可用。

(以上适用于我的基于融合的主题acquia marina http://drupal.org/project/acquia_marina)。一旦您拥有这些分类术语,您就可以轻松地在您的身体类别中打印出来。

答案 1 :(得分:0)

经过艰苦的努力,我发现了一种非常简单的方法。

Drupal Snippets上,有一个代码段可让您打印出应用于每个页面的分类术语作为文本。

唯一的问题是该代码片段会打印出分类词中的任何空格或标点符号,这对于身体分类是没有好处的。

但是,通过添加str_replace命令,您可以删除所有空格和标点符号。

我确信还有其他人想要将taxonmy术语打印为正文类,所以为了节省麻烦,这里是我在str_replace命令中添加的代码。

将以下内容放入template.php:

function getTerm($label, $vid, $link) {
    $node = node_load(array('nid'=>arg(1)));
    foreach((array)$node->taxonomy as $term){
        if ($term->vid == $vid){
            if ($link){
                $link_set[] = l($term->name, taxonomy_term_path($term));
            } else {
                $link_set[] = $term->name;
            }
        }
    }
    if (!empty($link_set)){
        $label = ($label) ? "<strong>$label </strong>" : "";
        $link_set = $label.implode(', ', $link_set);
    }
   $link_set = str_replace(' ', '_', $link_set);
  $link_set = str_replace('&', 'and', $link_set); 
  $link_set = strtolower($link_set);

 return $link_set;
}

将以下内容放在Page.tpl.php中:

<body class="taxonomy-<? print getTerm(false, 1, false);?>">

我希望这可以帮助那些遇到同样问题的人。

额外提示: (1)在我发布的代码中,唯一标出的标点是&符号(即'&amp;')。 如果您还有其他标点符号,请使用以下内容:

$ link_set = str_replace('INSET_PUNCTUATION_HERE','INSERT_REPLACEMENT_HERE',$ link_set);

将此命令放在我为template.php发布的代码中的其他$ link_set行下。

(2)在我发布的page.tpl.php代码中,“分类法 - ”部分在每个body class术语之前放置了分类法和破折号。您可以根据需要编辑此项目。