在Drupal 6中,如何将分类术语打印为CSS body class?
我发现这个片段可以让你几乎将Drupal内容的每个方面打印成一个正文类,但它不包括分类术语:
http://www.davidnewkerk.com/book/122
能够将分类术语作为一个体类打印对于主题过程至关重要,因此我很惊讶解决方案并不容易获得。
答案 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术语之前放置了分类法和破折号。您可以根据需要编辑此项目。