基于多个术语/节点引用查询drupal节点

时间:2011-09-06 19:25:41

标签: drupal

我需要根据分类术语查询drupal节点,该分类术语是我需要查询的内容类型的几个引用跃点。

我给了一个包含term_reference的术语的术语ID。引用的术语包含节点引用。引用的节点是我想要的。有干净的方法吗?

1 个答案:

答案 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()。这将减少对数据库的调用并使事情更具性能。

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