2011-09-06 101 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()。这将减少对数据库的调用并使其更具性能。

如果您想要更具体的答案,请随时发布有关您的数据的更多详细信息,我会更新我的答案。