Commerce популярные товары (= самые продаваемые товары). Оптимальный способ. Оптимизация запроса базы данных

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

Аватар пользователя tlito tlito 16 августа 2014 в 15:21

Здравствуйте, уважаемые девелоперы!
В поиске я нашёл только http://xandeadx.ru/blog/drupal/745
Однако, я любитель оптимально работающих сайтов, и поэтому не хотелось бы делать Вьюс с длинным запросам в БД.
В приведенном решении пишут "Запрос получается достаточно тяжёлый, например при 2000 товаров и 2000 заказов он выполняется ~200 ms".
И также пишут варианты добавления поля в product display популярность товара и вычислять это число по крону. Такой вариант подходит.
Подскажите есть ли где-нибудь оптимальный способ вывода популярных товаров без обращения к заказам и анализа??
Хотелось бы так:
1. добавить поле "Популярность товара" в product display (то есть к типу материала Товар)
2. после оформления каждого заказа инкрементировать это число на 1 (или на количество позиций товара в заказе)
3. во вьюс выводить популярные товары, сортируя по полю "Популярность товара"
4. также можно вручную изменять это поле
5. после удаления заказов из бд значение этого поля не изменяется, то есть вычисляется это поле только после оформления каждого заказа, а не по крону с анализом всех заказов.

Просьба помочь как это лучше сделать. Например непонятно как добавить действие инкрементирования после оформления заказа, rules ?

Комментарии

Аватар пользователя tlito tlito 10 ноября 2015 в 11:49

и возможно есть проблема с рулс: я добавил рулс по событию - после сохранения заказа - добавляю действие: установить переменную (set variable) но в Дата Селекторе ничего не получается: пишу node, пишу action: но ничего не выпадает.

а если и выпадает - то только html-теги:

как там делать?

Аватар пользователя tlito tlito 16 августа 2014 в 16:25

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

Аватар пользователя tlito tlito 10 ноября 2015 в 11:49

Я уже добавил к Коммерческому продукту (на складе) поле Популярность. Как на скрине 1.

И в Rules в правиле "Инкрементировать популярность" добавил цикл в котором для каждого line_items выбирается Fetch Коммерческий продукт. как на скрине 2

И пытаюсь добавить Calculate value и выбрать собственно из fetched_entity поле Популярность, которое есть в типе материала Товар (это я понимаю, Коммерческий продукт, в общем на складе), но такого поля нет. Вообще у этого типа есть 4 поля: артикул, цена, название, популярность.
А Рулс предлагает для него выбор только этих полей как на скрине 3

подскажите как тут доделать инкремент и запись популярности?

Аватар пользователя tlito tlito 5 сентября 2014 в 10:49

Подскажите, пожалуйста, это представление не отображается анонимам.
Исправил в представлении Доступ - разрешения - просмотр содержимого. СБросил кеш. Все равно не отображает ядл анонимов.
Доступ - роль - anonymous. Сбросил кеш. Не показывает.
Для админа показывает всегда.
Как показать всем?

Аватар пользователя tlito tlito 5 сентября 2014 в 13:14

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