1

特定の語彙に属する、サイト内のすべての分類リストを示すこのスニペットがあります。リスト全体を印刷する代わりに、実際にロードしているノードに属する用語のみを印刷するにはどうすればよいですか? 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/>';
    }
}
 ?>
4

2 に答える 2

2

このために余分なクエリを実行しないことをお勧めします。この情報は $node オブジェクトで利用できるはずです。

[print_r($node)] を印刷して、分類オブジェクト名 ($node->taxonomy) と分類情報がどのように構成されているかを確認し、それを使用してノード ページまたはノード ティーザーにカテゴリを表示します。

他のページでは、node_load を使用して最初にノードをロードし、次に同じことを行うことができます。

于 2013-02-12T18:02:27.897 に答える
1

この場合、 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/>';
    }
}
?>
于 2013-02-13T16:52:19.720 に答える