Drupal 7:手动列出具有这些条款的分类法术语和节点

时间:2012-11-02 16:01:46

标签: php drupal drupal-7 drupal-modules

在Drupal 7块中,我试图在无序列表中列出特定词汇表的分类术语,并且还将任何已发布的节点作为子项的分类术语的一部分。

示例:

假设我有一个名为Products的词汇表,其中包含分类术语Beer,Wine,&威士忌酒。 Say Beer有2个内容节点(Guinness& Budweiser)等等。

它应该看起来像这样:

  • 啤酒(2)
    • 力士
    • 百威
  • 葡萄酒(2)
    • 黑皮诺
    • White Zinfandel
  • 威士忌(3)
    • 杰克丹尼尔斯
    • Makers Mark
    • Crown Royal

我已经弄清楚如何用计数显示“只是”分类术语,但是无法弄清楚如何打印与每个术语相关的所有已发布节点。这就是我得到的:

<?php

$vid = 1; //vocabulary id

$query = "SELECT tid, name, count
FROM (
SELECT td.tid AS tid, name, COUNT(td.tid) AS count
FROM taxonomy_term_data AS td
JOIN taxonomy_index AS tn
  ON td.tid = tn.tid
JOIN node AS n
  ON n.nid = tn.nid
WHERE td.vid = ". $vid ."
  AND n.status = 1
GROUP BY td.tid
ORDER BY count DESC
) AS t
ORDER BY name ASC";

$result = db_query($query);

print '<ul>';   
foreach($result as $term) {
if ($term->count > 0) {
  print '<li>';
  echo l($term->name, "taxonomy/term/$term->tid").' ('.$term->count.')';
  print '</li>';
}
}
print '</ul>';    

?>

这将产生以下输出:

  • 啤酒(2)
  • 葡萄酒(2)
  • 威士忌(3)

但是,如何让这些分类术语的子项显示属于该分类术语的已发布节点?

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

你绝对可以通过观点来做到这一点。使用“字段”类型视图。添加节点标题和“所有分类术语”(按词汇过滤)作为字段。添加指定未发布的过滤器以及所需的节点类型。在视图的格式设置中,将“分组字段”设置为分类术语。 (可选)指定排序。通常我按术语排序,然后按节点标题排序。

答案 1 :(得分:0)