Есть интересная задача.
На сайте (интернет-магазин, но это не так важно) нужно на странице ноды вывести список других нод.
Конкретное применение - на странице товара вывести список рекомендуемых товаров.
Однако есть нюанс Хочется максимальной гибкости в управлении правилами вывода этих нод.
Процесс видится следующим образом:
1. Создается определенная таблица с правилами. Например:
- Если нода привязана к термину "Epson" словаря "производители", числовое поле "цена" больше 500 и меньше 10000 - добавлить в список "Рекомендованные товары" ноду 3 и 8 - "Сетевой фильтр" и "Бумага Снегурочка"
- Если у ноды отмечено логическое поле "WiFi" - добавить в список "Рекомендованные товары" ноду 157 - "WiFi роутер"
и т.д.
2. При выводе ноды прогоняем ее по всем этим правилам, и, в случае совпадения условий, добавляем в список нужные ноды, а потом выводим их
Хочется, чтобы менеджеры магазина смогли самостоятельно добавлять такие "правила".
Понятно, что без написания модуля здесь не обойтись. Однако не хотелось бы изобретать велосипед. Можно ли использовать какие-то существующие решения, API других модулей...?
По логике работы напрашивается связь с Context (и context_entity_field). Действительно, можно задавать такие правила в виде контекстов, но не очень понятно, что с этим контекстом делать дальше. Может быть, написать какую-то свою reaction, которая добавляет выбранные nid в общий список, а потом выводить все это (вьюсом или просто через node_view)?
Есть идеи у сообщества?
Комментарии
Только модуль писать.
Я делал по другому. В ноду-товар добавлял множественную связь с другой нодой, и через эту связь крепил другие товары. Там уже что надо было то подставляли в раздел: "С этим товаром покупают" или "Рекомендованные товары" (у всех по разному, но я советую первый вариант).
Есть нода
чтобы создать списки нод схожих с ней используем views
(возможно с node reference, возможно по таксономии, через аргумент ноды - по разному)
Чтобы вывести один из этих списков используем viewfield и ссылаемся на нужную вьюху. Можно задать по молчанию. Можно то же самое через entity reference.
"Похожие товары" - это другая тема. И это уже сделано
Речь о том, чтобы дать менеджеру магазина удобный интерфейс для привязки рекомендуемых товаров не к одному товару, а сразу к большой группе. В идеале при этом сделать инструмент универсальным - чтобы можно было еще по значениям полей привязываться.
Насколько могу судить, подобные решения - тот-же context, к примеру, выводящий блоки в зависимости от условий - работают достаточно шустро.
Да, сейчас так и сделано. Проблема в том, что для >3000 товаров в базе привязать к каждому "рекомендуемые" - достаточно трудоемкий процесс. Нужна возможность привязываться именно к группе товаров по определенным условиям.
Подозреваю можно сделать через entity reference и контекстные фильтры.
1. Создаем тип материала Правила (для вывода похожих материалов), где будут параметры для вывода, типа две крайние цены, категория и т.п.
2. Создаем нужные материалы этого типа, т.е. конкретные значения для наших фильтров.
3. Привязываем через entity reference к каждому товару свой фильтр.
4. Создаем представление где через связь вытаскиваем значения фильтров и передаем их в качестве аргументов контекстным фильтрам (тут немножко php).
вьюс-таблица сущностей с фильтрацией.
vbo екшн "изменить значение поля".
отдельно - сопутствующие товары лучше планировать на таксономии.
Слишком умно для простой задачи.
Не надо так сложно делать. Тем более, без самописного модуля, решение данной задачи, я не вижу!
Лучше связями все подвязать и вьхой выводить их. В этом даже плюс есть, не будет ошибок по типу Принтер, а к нему вывело почемуто чернила не для этого принтера.
Привязывать "сопутствующие" к товару однозначно - entityreference
Привязывать можно вручную, а можно автоматизировать.
Короче Rules+Views+VBO+...
И все получиться-)
вот и я тоже такого мнения - нужно создавать правила на основе рулесов . К примеру, если при создании или обновлении ноды у нее есть поле term_reference равное "epson" и нужные значения цены, то в экшене добавляем этой ноде в entity_reference поле нужные ноды-товары
а чтобы не плодить правила, нужно использовать компоненты(rule или rule set), которые после их создания добавлять в правило в экшен
А группа это что? Термин?
Если да - значит связать термины.