我需要根据分类术语来查询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