我需要根據分類術語來查詢drupal節點,該分類術語與我需要查詢的內容類型相距幾個參考點。基於多個術語/節點引用來查詢drupal節點
對於包含term_reference的術語,我給出了術語id。引用的術語包含節點引用。引用的節點是我試圖得到的。有沒有一種乾淨的方式來做到這一點?
我需要根據分類術語來查詢drupal節點,該分類術語與我需要查詢的內容類型相距幾個參考點。基於多個術語/節點引用來查詢drupal節點
對於包含term_reference的術語,我給出了術語id。引用的術語包含節點引用。引用的節點是我試圖得到的。有沒有一種乾淨的方式來做到這一點?
是的,有乾淨的方法可以做到這一點,但我不能提供非常具體的建議,沒有真正看到你的數據結構。我會從開始就開始,並且每一步都只是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()
。這將減少對數據庫的調用並使其更具性能。
如果您想要更具體的答案,請隨時發佈有關您的數據的更多詳細信息,我會更新我的答案。
你看過關係嗎? – PatrickS
我需要在PHP函數中執行此操作,而不是通過GUI。結果通過客戶端的ajax函數獲取,以基於表單上的操作填充選擇框。 – Dan
你對哪個Drupal版本感興趣? Drupal 7擁有現場API,代碼完全不同。 – kiamlaluno