Интересная задачка: вывод нод, исходя из контекста

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

Аватар пользователя Anton L. Safin Anton L. Safin 4 июня 2014 в 19:47

Есть интересная задача.

На сайте (интернет-магазин, но это не так важно) нужно на странице ноды вывести список других нод.
Конкретное применение - на странице товара вывести список рекомендуемых товаров.

Однако есть нюанс Smile Хочется максимальной гибкости в управлении правилами вывода этих нод.

Процесс видится следующим образом:

1. Создается определенная таблица с правилами. Например:

- Если нода привязана к термину "Epson" словаря "производители", числовое поле "цена" больше 500 и меньше 10000 - добавлить в список "Рекомендованные товары" ноду 3 и 8 - "Сетевой фильтр" и "Бумага Снегурочка"
- Если у ноды отмечено логическое поле "WiFi" - добавить в список "Рекомендованные товары" ноду 157 - "WiFi роутер"

и т.д.

2. При выводе ноды прогоняем ее по всем этим правилам, и, в случае совпадения условий, добавляем в список нужные ноды, а потом выводим их

Хочется, чтобы менеджеры магазина смогли самостоятельно добавлять такие "правила".

Понятно, что без написания модуля здесь не обойтись. Однако не хотелось бы изобретать велосипед. Можно ли использовать какие-то существующие решения, API других модулей...?
По логике работы напрашивается связь с Context (и context_entity_field). Действительно, можно задавать такие правила в виде контекстов, но не очень понятно, что с этим контекстом делать дальше. Может быть, написать какую-то свою reaction, которая добавляет выбранные nid в общий список, а потом выводить все это (вьюсом или просто через node_view)?

Есть идеи у сообщества?

Комментарии

Аватар пользователя whiesam whiesam 4 июня 2014 в 20:11

Только модуль писать.

Я делал по другому. В ноду-товар добавлял множественную связь с другой нодой, и через эту связь крепил другие товары. Там уже что надо было то подставляли в раздел: "С этим товаром покупают" или "Рекомендованные товары" (у всех по разному, но я советую первый вариант).

Аватар пользователя VasyOK VasyOK 5 июня 2014 в 2:36

Есть нода
чтобы создать списки нод схожих с ней используем views
(возможно с node reference, возможно по таксономии, через аргумент ноды - по разному)

Чтобы вывести один из этих списков используем viewfield и ссылаемся на нужную вьюху. Можно задать по молчанию. Можно то же самое через entity reference.

Аватар пользователя Anton L. Safin Anton L. Safin 5 июня 2014 в 8:40

"VasyOK" wrote:
чтобы создать списки нод схожих с ней используем views

"Похожие товары" - это другая тема. И это уже сделано Smile
Речь о том, чтобы дать менеджеру магазина удобный интерфейс для привязки рекомендуемых товаров не к одному товару, а сразу к большой группе. В идеале при этом сделать инструмент универсальным - чтобы можно было еще по значениям полей привязываться.

Аватар пользователя Anton L. Safin Anton L. Safin 5 июня 2014 в 8:42

"ХулиGUN" wrote:
... и ждём рендера пол минуты...

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

Аватар пользователя Anton L. Safin Anton L. Safin 5 июня 2014 в 8:43

"whiesam" wrote:
В ноду-товар добавлял множественную связь с другой нодой, и через эту связь крепил другие товары.

Да, сейчас так и сделано. Проблема в том, что для >3000 товаров в базе привязать к каждому "рекомендуемые" - достаточно трудоемкий процесс. Нужна возможность привязываться именно к группе товаров по определенным условиям.

Аватар пользователя Sandy Big Boy Sandy Big Boy 5 июня 2014 в 10:35

Подозреваю можно сделать через entity reference и контекстные фильтры.
1. Создаем тип материала Правила (для вывода похожих материалов), где будут параметры для вывода, типа две крайние цены, категория и т.п.
2. Создаем нужные материалы этого типа, т.е. конкретные значения для наших фильтров.
3. Привязываем через entity reference к каждому товару свой фильтр.
4. Создаем представление где через связь вытаскиваем значения фильтров и передаем их в качестве аргументов контекстным фильтрам (тут немножко php).

Аватар пользователя multpix multpix 5 июня 2014 в 12:12

"Anton L. Safin" wrote:
привязываться именно к группе товаров

вьюс-таблица сущностей с фильтрацией.
vbo екшн "изменить значение поля".

отдельно - сопутствующие товары лучше планировать на таксономии.

Аватар пользователя ihappy ihappy 5 июня 2014 в 12:39

Слишком умно для простой задачи.
Не надо так сложно делать. Тем более, без самописного модуля, решение данной задачи, я не вижу!
Лучше связями все подвязать и вьхой выводить их. В этом даже плюс есть, не будет ошибок по типу Принтер, а к нему вывело почемуто чернила не для этого принтера.

Аватар пользователя Orion76 Orion76 5 июня 2014 в 14:09

Привязывать "сопутствующие" к товару однозначно - entityreference
Привязывать можно вручную, а можно автоматизировать.
Короче Rules+Views+VBO+...
И все получиться-)

Аватар пользователя drupby drupby 5 июня 2014 в 16:38

"orion76" wrote:
Привязывать "сопутствующие" к товару однозначно - entityreference
Привязывать можно вручную, а можно автоматизировать.
Короче Rules+Views

вот и я тоже такого мнения - нужно создавать правила на основе рулесов . К примеру, если при создании или обновлении ноды у нее есть поле term_reference равное "epson" и нужные значения цены, то в экшене добавляем этой ноде в entity_reference поле нужные ноды-товары
а чтобы не плодить правила, нужно использовать компоненты(rule или rule set), которые после их создания добавлять в правило в экшен

Аватар пользователя VasyOK VasyOK 5 июня 2014 в 17:04

"Anton L. Safin" wrote:
удобный интерфейс для привязки рекомендуемых товаров не к одному товару, а сразу к большой группе

А группа это что? Термин?
Если да - значит связать термины.