2013-02-12 27 views
1

我有這個片段,顯示網站中屬於特定詞彙表的所有分類列表。 而不是打印整個列表,我怎樣才能打印屬於我實際加載的節點的條款? 我有一個Drupal 7安裝。如何只打印屬於當前帖子的類別?此片段顯示網站中的所有類別

這是我如何打印節點I'm的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/>'; 
    } 
} 
?> 
+1

您是否嘗試過在WHERE子句像SG擴展「和n.nid =「。$ node-> id? – fejese 2013-02-12 16:02:43

+0

這個伎倆!謝謝!!我會發布完整的正確答案,以防其他人需要它。你想發佈它,所以我可以設置你的答案是正確的嗎?還是應該? – Rosamunda 2013-02-12 16:12:54

+0

謝謝,但我猜** sumoanand **的答案更合適。我會發布我的答案,雖然:) – fejese 2013-02-13 16:49:19

回答

2

我建議不要爲這個額外的運行查詢。 該信息應該在$ node對象中可用。

只需打印[print_r的($節點),看看到底有什麼分類對象名稱($節點 - >分類)&信息如何分類的結構&用它來顯示節點頁面或節點上傳情類。

在其他頁面上,可以使用node_load第一次加載節點,然後執行相同的操作。

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/>'; 
    } 
} 
?> 
相關問題