2011-09-06 143 views
1

我需要根據分類術語來查詢drupal節點,該分類術語與我需要查詢的內容類型相距幾個參考點。基於多個術語/節點引用來查詢drupal節點

對於包含term_reference的術語,我給出了術語id。引用的術語包含節點引用。引用的節點是我試圖得到的。有沒有一種乾淨的方式來做到這一點?

+0

你看過關係嗎? – PatrickS

+0

我需要在PHP函數中執行此操作,而不是通過GUI。結果通過客戶端的ajax函數獲取,以基於表單上的操作填充選擇框。 – Dan

+0

你對哪個Drupal版本感興趣? Drupal 7擁有現場API,代碼完全不同。 – kiamlaluno

回答

0

是的,有乾淨的方法可以做到這一點,但我不能提供非常具體的建議,沒有真正看到你的數據結構。我會從開始就開始,並且每一步都只是var_dump()

例如,第一次提取對應於你給出的單詞ID術語:

$term = taxonomy_term_load($tid); 
var_dump($term); 

看那var_dump(),看看如何訪問您的長期參考場。我猜它會是這樣的:

foreach (field_get_items('taxonomy_term', $term, 'YOUR_TERM_REFERENCE_FIELD') as $referenced_term) { 
    var_dump($referenced_term); 
} 

然後看看你在那裏給你。然後,在此之後,執行同樣的操作來獲取所有引用的節點。

整個過程將基本上涉及循環遍歷每個級別,加載引用,遍歷這些引用,加載引用等,直到您有所需的節點。所以,你可能最終的東西像下面這樣,假設你的長期參考字段被稱爲field_term_reference和您的節點參考一個是field_node_reference

$nodes = array(); 
$term = taxonomy_term_load($tid); 
foreach (field_get_items('taxonomy_term', $term, 'field_term_reference') as $referenced_tid) { 
    $referenced_term = taxonomy_term_load($referenced_tid['tid']); 
    foreach (field_get_items('taxonomy_term', $referenced_term, 'field_node_reference') as $referenced_nid) { 
     $nodes[] = node_load($referenced_nid['nid']); 
    } 
} 

return $nodes; 

而且,它的價值,之後你終於能夠檢索您的節點,您可能需要返回代碼並將一些foreach循環合併到加載多個實體的D7函數中,如taxonomy_term_load_multiple()node_load_multiple()。這將減少對數據庫的調用並使其更具性能。

如果您想要更具體的答案,請隨時發佈有關您的數據的更多詳細信息,我會更新我的答案。