drupal - почему $ node-> таксономия является массивом - PullRequest
0 голосов
/ 22 ноября 2010

кто-то написал этот код.

 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 ]

4 голосов
/ 22 ноября 2010

В коде, связанном с Drupal, $node почти всегда является объектом, созданным функцией node_load().Поскольку каждый модуль имеет возможность добавлять свои собственные свойства к этому объекту, очень трудно найти центральную документацию по этим свойствам.

По опыту и по переменным проверкам опытные разработчики Drupal знают, что при установке $node->taxonomyвсегда является массивом объекта термина (как возвращено функцией taxonomy_get_term()), проиндексированным их соответствующими идентификаторами (названными tids, для идентификатора термина).Этот массив устанавливается функцией taxonomy_nodeapi(), когда $op == 'load', и создается функцией taxonomy_get_terms().

Вопрос дает мало информации, но мы можемПредположим, что цикл предназначен для построения двух массивов, используемых для генерации запроса к базе данных, который фильтрует столбец tid, соответствующий объектам $node.Поскольку данные терминов уже хранятся в элементах $node->taxonomy, будем надеяться, что этот запрос не используется для повторной загрузки терминов для отображения некоторых их названий и / или описаний.Сбор 't.tid =% d', вероятно, является плохой идеей. Запрос лучше построить с помощью одного "tid in (". <a href="http://api.drupal.org/api/drupal/includes--database.inc/function/db_placeholders/6" rel="nofollow"><code>db_placeholder($args). ")" WHERE предложения после сбора всех приливов в $args.

0 голосов
/ 22 ноября 2010

t.tid - это просто запрос SQL.% d является заполнителем для $ args [], который состоит из $ term-> tid.Это похоже на такую ​​структуру: соединения PDO .

0 голосов
/ 22 ноября 2010

Вопрос очень неясен.Все элементы в объекте узла являются массивами.Вы можете проверить это самостоятельно, используя:

print_r($node);
die;

Или используя любой PHP-отладчик.

для foreach, это очень просто foreach ... Я не понимаю, в чем проблемас этим.

...