Всех приветствую! Уже несколько дней бьюсь с задачей и никак не могу найти решение. Суть такая:
Исходные данные
Словарь "Критерии выбора". Термины:
- 12+
- 16+
- 18+
- Роман
- Повесть
- Рассказ
- Комедия
- Трагедия
- Фантастика
- Классика
и т.д.
Тип материала: Книга
Он имеет поле "Критерии выбора" — ссылка на термин словаря "Критерии выбора".
Словарь "Разбивка (SEO)"
И все термины словаря имеют поле "Критерии выбора" — ссылка на термин словаря "Критерии выбора".
Упрощенный пример: далее создаем материал Книги, со следующими "Критериями выбора" (отмечаем чекбоксами):
- 18+, Рассказ, Комедия
- 16+, Роман, Фантастика
- 12+,16+,18+, Повесть, Классика
Далее создаем термины (Для сео разбивки):
- "Читать рассказы для взрослых". Критерии выбора: 18+, Рассказ, Комедия
- "Читать фантастику онлайн", 16+, Роман, Фантастика
- "Читать классические повести", Повесть, Классика
- "Читать классические повести для взрослых", 18+, Повесть, Классика
Можно ли во VIEWS сделать так, чтобы при заходе на страницу термина словаря "Разбивка (SEO)" выводились связанные ноды через словарь "Критерии выбора"? Например:
При заходе на страницу:
"Читать рассказы для взрослых" выводилась 1 книга.
"Читать фантастику онлайн" - 2 книга.
"Читать классические повести" и "Читать классические повести для взрослых" - 3 книга.
Книги должны содержать все указанные в термине для разбивки критерии. У меня получилось выводить страницы, даже если она содержит 1 критерий. Т.е. коммедии 18+ выводились в Повесть 18+.
Комментарии
Структура у вас явно костыльная. Имхо, переработайте.
Суть, что с текущей вам нужны критерии:
комедии and 18+
, а у вас сейчас:
комедии or 18+
Хорошо, тогда как сделать так, чтобы было 1000+ страниц разбивки и все ноды были по ним разбиты, не добавляя по 500-800 терминов к каждой ноде, чтобы отобразить ее на странице разбивки?
Не пойму как сделать как сделать "and", если ноды мы получаем через связи. Тут нужен скорее не "and", а проверка на содержание нужных элементов, на подобии in_array
Контекстные фильтры, только с SEO помучаетесь, но решаемо...
Как я вижу вашу структуру (глубоко не вникая), это минимум 2 словаря: "жанр" (комедия, повесть и т.д.), "рейтинг" (12+, R и т.д.)
А вообще, Вы были правы! Переделал контекстный фильтр под обработку множественных значений.
Для терминов словаря "Разбивка (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 СЕО-оптимизированных страниц терминов с нужными материалами.