如何只打印属于当前帖子的类别?此片段显示网站中的所有类别


How do I only print categories that belong to the current post? This snippet shows all the categories in the site

我有一个片段,它显示了站点中属于特定词汇表的所有分类列表。我如何打印属于我实际加载的节点的术语,而不是打印整个列表?我安装了Drupal 7。

这就是我在以下位置打印节点id的方式:<?php print $node->nid;?>

<?php 
$vid = 11; //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);
foreach($result as $term) {
    if ($term->count > 0) {
      echo l($term->name, "taxonomy/term/$term->tid").' ('.$term->count.')'.'<br/>';
    }
}
 ?>

我建议不要为此运行额外的查询。此信息应在$node对象中可用。

只需打印它[print_r($node)]并查看分类法对象名称($node->taxonomy)&分类信息是如何结构化的&使用它可以在节点页面或节点摘要上显示类别。

在其他页面上,您可以使用node_load首先加载节点,然后执行相同的操作。

sumoand的答案在这种情况下更为优化,但对于一些sql练习来说,这里有你想象中的确切解决方案:

<?php 
$vid = 11; //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
  AND n.nid = ".$node->id."
GROUP BY td.tid
ORDER BY count DESC
) AS t
ORDER BY name ASC";
$result = db_query($query);
foreach($result as $term) {
    if ($term->count > 0) {
      echo l($term->name, "taxonomy/term/$term->tid").' ('.$term->count.')'.'<br/>';
    }
}
?>