Один вьюс для вывода анонсов разных рубрик

Главные вкладки

Аватар пользователя marat M marat M 1 августа 2019 в 12:11

Задача - использовать один вьюс для вывода анонсов по разным темам (оформлены как теги).
Итак, есть вьюс, выводит анонсы статей. Помимо прочих, есть фильтр - если поле "теги" не нулевой.
Добавляю контекстный фильтр, чтобы выводились анонсы нод с определенным тегом. Сам вьюс вывожу программно в шаблоне несколько раз с разными аргументами, аргумент - 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; }
?>

Прошу содействия, ибо в тупике.

Лучший ответ

Аватар пользователя marat M marat M 3 августа 2019 в 10:04

Способ 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]);
?>

А во вьюсе используем контекстный фильтр:

Готово. Спасибо сообществу, без подсказок друпала.ру было бы тяжко.
Не отмечаю пост как решение, бо чую, что оно мягко говоря не идеальное.

Комментарии

Аватар пользователя marat M marat M 3 августа 2019 в 10:04

Способ 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]);
?>

А во вьюсе используем контекстный фильтр:

Готово. Спасибо сообществу, без подсказок друпала.ру было бы тяжко.
Не отмечаю пост как решение, бо чую, что оно мягко говоря не идеальное.