Drupal 4.7 升级准备笔记(3): 分离freetags与分类的显示

自drupal 4.7起,引入了新的tagging的方式,也即是freetags。从根本上讲,这仍然是drupal分类系统(taxonomy)的一部分,所以在页面上显示的时候,freetags与一般的分类是混在一起的,有时候会带来不方便,所以我们希望用一种方法把两者分离,就像awtags与分类的显示那样。这部分的显示控制有主题文件中的node.tpl.php来完成,具体的说,在一般的主题的node.tpl.php中,分类的显示是由以下代码来完成的:
print terms;
?>

这里的term包括分类系统中所有的分类(term),而我们现在就要把categories和reetags分开,分开的原理是利用他们所从属的不同的vocabulary。首先我们要查知blog分类的vid与freetags的vid,在phpMyAdmin中,浏览vocabulary表,就能查到相关的信息。我这里分类的vid是11,freetags的vid是12,在显示
print terms;
?>
的地方,我们加入第一段代码来显示分类:
$vid = 11;
//分类的vid
$result = db_query("SELECT t.tid, t.name FROM {term_data} t, {term_node} r WHERE r.tid = t.tid AND r.nid = %d AND t.vid = %d ORDER BY weight, name", array($node->nid, $vid));
while ($term = db_fetch_object($result)) {
$cats[] = l($term->name, 'taxonomy/term/' . $term->tid);
}
if ($cats) {
print t("Category: ") . implode('| ', $cats);
}
//定义新的变量$cats,我们仍然使用'|'来分隔分类,你可以按照喜好更改
?>

然后在 content 的div结束的地方,也就是内容的下面,新建一个显示tags的div:

$vid = 12;
//freetags的vid
$result = db_query("SELECT t.tid, t.name FROM {term_data} t, {term_node} r WHERE r.tid = t.tid AND r.nid = %d AND t.vid = %d ORDER BY weight, name", array($node->nid, $vid));
while ($term = db_fetch_object($result)) {
$tags[] = l($term->name, 'taxonomy/term/' . $term->tid);
}
if ($tags) {
print t("Tags: ") . implode($tags);
//定义新的变量$tags,这里我取消了不同tags之间间隔,主要是为了我这里主题显示需要,如果你想更改,可以仿照上面的category的做法,在最后的implode()中加入你需要的分隔字符(譬如逗号)
}
?>

这样改造工作就完成了:)

Blog分类: