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。谢谢。
答案 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 (".
的项目中,因此我们希望此查询不会用于重新加载术语以显示其某些名称和/或说明。收集't.tid =%d'可能是一个坏主意,在收集taxonomy_get_terms()
.")"$args
中的所有tid之后,使用单个{{1}} WHERE子句可以更好地构建查询。
答案 1 :(得分:0)
问题非常不明确。节点对象下的所有项都是数组。您可以使用以下方式自行检查:
print_r($node); die;
或者使用任何PHP调试器。
对于foreach,这是非常简单的foreach ...我不明白这是什么问题。答案 2 :(得分:0)
t.tid只是一个SQL查询。 %d是$ args []的占位符,由$ term-> tid组成。就像这个结构:PDO connections。