我需要根据分类术语查询drupal节点,该分类术语是我需要查询的内容类型的几个引用跃点。
我给了一个包含term_reference的术语的术语ID。引用的术语包含节点引用。引用的节点是我想要的。有干净的方法吗?
答案 0 :(得分: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()
。这将减少对数据库的调用并使事情更具性能。
如果您想要更具体的答案,请随时发布有关您数据的更多详细信息,我会更新我的答案。