Запрос узлов drupal на основе нескольких ссылок на термины / узлы - PullRequest
1 голос
/ 06 сентября 2011

Мне нужно запросить узлы drupal на основе термина таксономии, который находится на расстоянии нескольких ссылочных шагов от типа контента, который мне нужно запросить.

Мне дан идентификатор термина для термина, который содержит term_reference.Указанный термин содержит ссылку на узел.Ссылочные узлы - это то, что я пытаюсь получить.Есть ли чистый способ сделать это?

1 Ответ

0 голосов
/ 21 ноября 2012

Да, есть чистые способы сделать это, но я не могу дать очень конкретный совет, фактически не увидев вашу структуру данных. Я бы начал с самого начала и просто var_dump() на каждом шагу.

Например, сначала выберите термин, соответствующий указанному вами идентификатору термина:

$term = taxonomy_term_load($tid);
var_dump($term);

Посмотрите на var_dump(), чтобы узнать, как получить доступ к полю справочных терминов. Я предполагаю, что это будет примерно так:

foreach (field_get_items('taxonomy_term', $term, 'YOUR_TERM_REFERENCE_FIELD') as $referenced_term) {
    var_dump($referenced_term);
}

Тогда посмотри, что тебе там дано. Затем, после этого, сделайте то же самое, чтобы получить все упомянутые узлы.

Весь процесс в основном будет включать в себя циклическое прохождение каждого уровня, загрузку ссылок, циклическое прохождение по ним, загрузку ссылок и так далее, пока у вас не появятся нужные вам узлы. Таким образом, вы можете получить что-то вроде следующего, предполагая, что ваше поле ссылки на термин называется field_term_reference, а поле ссылки на ваш узел - field_node_reference:

$nodes = array();
$term = taxonomy_term_load($tid);
foreach (field_get_items('taxonomy_term', $term, 'field_term_reference') as $referenced_tid) {
    $referenced_term = taxonomy_term_load($referenced_tid['tid']);
    foreach (field_get_items('taxonomy_term', $referenced_term, 'field_node_reference') as $referenced_nid) {
        $nodes[] = node_load($referenced_nid['nid']);
    }
}

return $nodes;

Кроме того, после того, как вы наконец сможете получить свои узлы, вы можете вернуться к своему коду и объединить некоторые циклы foreach в функции D7, которые загружают несколько объектов, например taxonomy_term_load_multiple() и node_load_multiple(). Это уменьшит количество обращений к базе данных и сделает работу более производительной.

Если вам нужен более конкретный ответ, не стесняйтесь размещать более подробную информацию о ваших данных, и я обновлю свой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...