Вывести ноды по термину через словарь прослойку в VIEWS

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

Аватар пользователя Skerth Skerth 16 сентября 2018 в 17:09

Всех приветствую! Уже несколько дней бьюсь с задачей и никак не могу найти решение. Суть такая:

Исходные данные
Словарь "Критерии выбора". Термины:

  • 12+
  • 16+
  • 18+
  • Роман
  • Повесть
  • Рассказ
  • Комедия
  • Трагедия
  • Фантастика
  • Классика

и т.д.

Тип материала: Книга
Он имеет поле "Критерии выбора" — ссылка на термин словаря "Критерии выбора".

Словарь "Разбивка (SEO)"
И все термины словаря имеют поле "Критерии выбора" — ссылка на термин словаря "Критерии выбора".

Упрощенный пример: далее создаем материал Книги, со следующими "Критериями выбора" (отмечаем чекбоксами):

  1. 18+, Рассказ, Комедия
  2. 16+, Роман, Фантастика
  3. 12+,16+,18+, Повесть, Классика

Далее создаем термины (Для сео разбивки):

  1. "Читать рассказы для взрослых". Критерии выбора: 18+, Рассказ, Комедия
  2. "Читать фантастику онлайн", 16+, Роман, Фантастика
  3. "Читать классические повести", Повесть, Классика
  4. "Читать классические повести для взрослых", 18+, Повесть, Классика

Можно ли во VIEWS сделать так, чтобы при заходе на страницу термина словаря "Разбивка (SEO)" выводились связанные ноды через словарь "Критерии выбора"? Например:
При заходе на страницу:
"Читать рассказы для взрослых" выводилась 1 книга.
"Читать фантастику онлайн" - 2 книга.
"Читать классические повести" и "Читать классические повести для взрослых" - 3 книга.

Книги должны содержать все указанные в термине для разбивки критерии. У меня получилось выводить страницы, даже если она содержит 1 критерий. Т.е. коммедии 18+ выводились в Повесть 18+.

Лучший ответ

Аватар пользователя adano adano 16 сентября 2018 в 18:18

Контекстные фильтры, только с SEO помучаетесь, но решаемо...
Как я вижу вашу структуру (глубоко не вникая), это минимум 2 словаря: "жанр" (комедия, повесть и т.д.), "рейтинг" (12+, R и т.д.)

Комментарии

Аватар пользователя adano adano 16 сентября 2018 в 17:48
2

Структура у вас явно костыльная. Имхо, переработайте.

Суть, что с текущей вам нужны критерии:
комедии and 18+

, а у вас сейчас:
комедии or 18+

Аватар пользователя Skerth Skerth 16 сентября 2018 в 18:05

Хорошо, тогда как сделать так, чтобы было 1000+ страниц разбивки и все ноды были по ним разбиты, не добавляя по 500-800 терминов к каждой ноде, чтобы отобразить ее на странице разбивки?
Не пойму как сделать как сделать "and", если ноды мы получаем через связи. Тут нужен скорее не "and", а проверка на содержание нужных элементов, на подобии in_array

Аватар пользователя adano adano 16 сентября 2018 в 18:18

Контекстные фильтры, только с SEO помучаетесь, но решаемо...
Как я вижу вашу структуру (глубоко не вникая), это минимум 2 словаря: "жанр" (комедия, повесть и т.д.), "рейтинг" (12+, R и т.д.)

Аватар пользователя Skerth Skerth 16 сентября 2018 в 22:22

А вообще, Вы были правы! Переделал контекстный фильтр под обработку множественных значений.
Для терминов словаря "Разбивка (SEO)" изменил темплейт taxonomy-term--book_seo.tpl.php. И внес в него следующий код:


<?php

// Получаем критерии для этой разбивки:
$criteria field_get_items('taxonomy_term'$term'field_book_criteria_term');

if (!empty(

$criteria)) {
  
$arguments = array();

  foreach (

$criteria as $criteria_item) {
    
$arguments[] = $criteria_item['tid']; // Делаем массив аргументов из Tid
  
}

$arguments implode(','$arguments); // Массив в строку, например: "512,513,520"
}
else {
  
// Если у термина не заданы критерии, получаем тип книги, для вывода всех книг.
  // Это хорошо для общих СЕО запросов.
  
$type field_get_items('taxonomy_term'$term'field_book_type');
  
$arguments $type[0]['tid'];
}

// Вызываем Вьюс с нужными аргументами
print views_embed_view('showcase_book''list_term'$arguments);

?>

Все стало работать, как часы. Теперь можно создать хоть 1000 СЕО-оптимизированных страниц терминов с нужными материалами.