drupal - 为什么$ node-> taxonomy是一个数组

时间:2010-11-22 04:53:12

标签: php mysql drupal loops drupal-6

有人写了这段代码。

 foreach ($node->taxonomy as $term) {
 $tids[] = 't.tid = %d';
  $args[] = $term->tid;
 }

他怎么知道foreach“$ node-> taxonomy”是一个数组?当我循环它, foreach($ node-> taxonomy as $ term){ } 我得到的输出将是$ term的值。我不知道它是如何变成't.tid =%d'和$ term-> tid。谢谢。

3 个答案:

答案 0 :(得分:4)

在与Drupal相关的代码中,$node几乎总是由node_load()函数生成的对象。由于每个模块都有机会将自己的属性添加到此对象中,因此很难找到这些属性的中央文档。

根据经验和变量检查,经验丰富的Drupal开发人员知道,当set $node->taxonomy始终是由其各自的id(命名为tids)索引的一个term对象数组(由taxonomy_get_term()函数返回)对于术语ID)。此数组由$op == 'load'函数在$node时设置,由taxonomy_nodeapi()函数生成。

这个问题提供的信息很少,但我们可以猜测循环是为了构建两个用于生成数据库查询的数组,该数据库查询在tid列上过滤与$node->taxonomy对象的匹配。由于术语的数据已存储在"tid in (". taxonomy_get_terms() .")"的项目中,因此我们希望此查询不会用于重新加载术语以显示其某些名称和/或说明。收集't.tid =%d'可能是一个坏主意,在收集$args中的所有tid之后,使用单个{{1}} WHERE子句可以更好地构建查询。

答案 1 :(得分:0)

问题非常不明确。节点对象下的所有项都是数组。您可以使用以下方式自行检查:

print_r($node);
die;

或者使用任何PHP调试器。

对于foreach,这是非常简单的foreach ...我不明白这是什么问题。

答案 2 :(得分:0)

t.tid只是一个SQL查询。 %d是$ args []的占位符,由$ term-> tid组成。就像这个结构:PDO connections