Как связать событие в Rules Order Checkout (Завершения процесса оформления) с действием над кастомным полем в товаре Drupal7+Commerce

Аватар пользователя vasilyok vasilyok 19 октября в 18:22

Уважаемые знатоки помогите пожалуйста решить задачку, а точнее ее часть.
Нужно кастомное поле в Commerce Product "Количество покупок" увеличивать на 1 при событии в Rules "Завершения процесса оформления".
Я на полпути решения: создал Компонент в Rules который ищет сущность которая имеет поле "Количество покупок". К полю додается + 1, данные сохраняются в переменную, а потом полю присваиваться значения переменной.
Если создаю Rule по событию "После добавления товара в корзину", мне удается запустить Компонент, который делает арифметическое действие.

Но мне нужно связать commerce-order и Product. Читал аналогические 2 посты на форуме ( раз наверное 100). Ребята подробно описывают проблему 1 в один как моя. Написана логика решения в общих чертах. Но без реального примера, я уже несколько дней не могу решить эту задачку.

Догадываюсь, что нужно сделать еще одну компоненту, которая связывает сущности commerce-line-items, commerce-order и Product. Но не знаю как это сделать.

Помогите пожалуйста, дельными советами, скриншотами?

Комментарии

Аватар пользователя Andruxa Andruxa 20 октября в 10:30

У вас в commerce-order будут сущности commerce-line-item, фактически при добавлении товара в корзину (заказ) - туда создаются и добавляются сущности Commerce Line Items, и у них есть ссылка на сущность Commerce Product.
Что-то вроде commerce-order:commerce-line-item:commerce-product должно быть.

Аватар пользователя bumble bumble 20 октября в 10:40

Загружайте сущности по ID:
- лайн-айтем от заказа (лайн-айтем содержит ID заказа)
- товар от лайн айтема (лайн-айтем содержит SKU товара)

Дальше, манипулируйте полями. Для этого, либо добавьте проверку на наличие поля у сущности, либо проверку на бандл сущности (после этого станут доступны все поля сущности).

Есть модуль для добавления условий непосредственно в экшны, удобнее чем городить компоненты, если их, конечно, не нужно переиспользовать. Как минимум, проверки на бандл, облегчает.

Не забывайте сохранить сущность после всех изменений.

Можете ознакомится с фц-лом правил по статейкам отсюда.

Аватар пользователя vasilyok vasilyok 23 октября в 20:41

Добрый вечер! Спасибо за подсказки. Таким способом хотел реализовать платное голосование за конкурсанта (ноду) - пользователь нажимает внизу ноды (представлении товара) кнопку купить, которая имеет метку "Проголосовать" и при завершении заказа, должно количество голосов в поле "Проголосовало" быть +1.
Пока отказался от этого алгоритма в пользу Commerce License (можно фактически покупать роль пользователя или доступ к для скачивания файла), но там правда нужно больше шагов сделать: купить товар-лицензию, которая автоматически может присваивать роль пользователю, потом нужно вернуться фактически на ноду и уже нажать "Головать" как пользователь с правами доступа к голосованию (например, право голосовать с помощью Vote up/down).

Со временем буду совершенствовать - уменьшать количество шагов. Поэтому большое спасибо за подсказки!