Задача - использовать один вьюс для вывода анонсов по разным темам (оформлены как теги).
Итак, есть вьюс, выводит анонсы статей. Помимо прочих, есть фильтр - если поле "теги" не нулевой.
Добавляю контекстный фильтр, чтобы выводились анонсы нод с определенным тегом. Сам вьюс вывожу программно в шаблоне несколько раз с разными аргументами, аргумент - tid. Не выходит...
В контекстном фильтре написал ("Когда значение фильтра доступно или предоставлено по умолчанию") критерий проверки:
<?php
$curr_tag = $handler->argument;
$res = db_query("SELECT entity_id FROM field_data_field_tags WHERE field_tags_tid LIKE '%$curr_tag%'");
$nids = array();
foreach($res as $row) {
$nids[] = $row->entity_id;
}
$handler->argument = implode('+', $nids);
if ($handler->argument != '')
{ return true; } else
{ return false; }
?>
Прошу содействия, ибо в тупике.
Комментарии
Там всё решается аргументом из коробки.
Вам из материала его достаточно достать
http://xandeadx.ru/blog/drupal/523
Читайте способ 2
Способ xandeadx хорош, и спасибо ему огромное за всё. Но хотелось более точной наводки.
Решение найдено, описываю, может кому пригодится.
1. Контент-менеджер решает, какие темы (теги) ему интересны, и находясь в админке, записывает их в ноду.
2. Для главной страницы используем шаблон. В нужном регионе добываем из ноды темы, записываем в переменные и программно вызываем один и тот же вьюс N раз с разными аргументами:
<?php
$nid = 101; // нода с перечнем тем
$node_load = node_load($nid);
$wrapper = entity_metadata_wrapper('node', $node_load);
$get_field = $wrapper->field_short_text->value(); // указываем имя поля (field_short_text)
$field_value_1 = $get_field[0]; // получаем значение переменной вида "футбол"
...
$term_1 = taxonomy_get_term_by_name($field_value_1); // получаем tid по имени
...
$arg = [];
$arg[0] = key($term_1); // получаем нужное значение tid - аргумент
...
print views_embed_view('news_inner', 'popular_theme', $arg[0]);
?>
А во вьюсе используем контекстный фильтр:
Готово. Спасибо сообществу, без подсказок друпала.ру было бы тяжко.
Не отмечаю пост как решение, бо чую, что оно мягко говоря не идеальное.