【问题标题】:drupal--why $node->taxonomy is an arraydrupal--为什么 $node->taxonomy 是一个数组
【发布时间】:2010-11-22 04:53:12
【问题描述】:

有人写了这段代码。

 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 的。谢谢。

【问题讨论】:

    标签: php mysql drupal loops drupal-6


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      这个问题很不清楚。节点对象下的所有Item都是数组。您可以使用以下方法自行检查:

      print_r($节点); 死;

      或者使用任何 PHP 调试器。

      对于foreach,很简单的foreach...我不明白这有什么问题。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-10-29
          • 2014-06-23
          • 1970-01-01
          • 2019-06-21
          • 1970-01-01
          • 2020-09-29
          • 2015-01-24
          相关资源
          最近更新 更多