кто-то написал этот код.
foreach ($node->taxonomy as $term) {
$tids[] = 't.tid = %d';
$args[] = $term->tid;
}
как он знает, что в foreach "$ node → таксономия" - это массив? и когда я его зацикливаю, foreach ($ node → таксономия как $term) { } выход, который я получаю, будет значением $term. Я не знаю, как это происходит в "t.tid =% d" и "$ term- > tid. спасибо.
В коде, связанном с Drupal, a $node
почти всегда является объектом, созданным функцией node_load()
. Поскольку каждый модуль имеет возможность добавлять свои свойства к этому объекту, очень сложно найти центральную документацию этих свойств.
По опыту и проверке переменных опытные разработчики Drupal знают, что когда set $node->taxonomy
всегда является массивом термина-объекта (возвращаемого taxonomy_get_term()
), индексированные их соответствующими идентификаторами (с именем tids, для Term ID). Этот массив устанавливается taxonomy_nodeapi()
при $op == 'load'
и создается taxonomy_get_terms()
.
Вопрос дает небольшую информацию, но мы можем предположить, что цикл предназначен для создания двух массивов, используемых для создания запроса к базе данных, который фильтрует столбцы tid, соответствующие тем, которые имеют объект $node
. Поскольку данные терминов уже хранятся в элементах $node->taxonomy
, давайте надеяться, что этот запрос не будет использоваться для повторной загрузки терминов для отображения некоторых их имени и/или описания. Сбор "t.tid =% d", вероятно, плохая идея, запрос будет лучше строить с помощью одного "tid in (".
Предложение WHERE после сбора всех tids в db_placeholder($args)
.))$args
.
Вопрос очень неясен. Все элементы под объектом node являются массивами. Вы можете проверить это самостоятельно, используя:
print_r($node); die;
Или используя любой отладчик PHP.
для foreach, это очень просто foreach... Я не понимаю, в чем проблема с этим.
t.tid - это просто SQL-запрос. % d является заполнителем для $args [], который состоит из $term- > tid. Он похож на эту структуру: PDO-соединения.