[Решено] Как добавить поле из товара drupal commerce в правило?

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

Аватар пользователя Lavio Lavio 17 июня 2013 в 6:15

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

Мое решение
Создаю событие После обновления существующего термина
Дальше добавляю Сущность имеет поле и указываю там поле из термина.

А дальше ступор. Как туда добавить поле из товара коммерца? Если делать аналогично через Сущность имеет поле то в селекторе нет сущности товара... Уже неделю ищу инфу по этому поводу, но так и не нашел(

Если брать событие связанное с комерцем типа "расчета цены" то появляется сущность товара. Но используя одновременно оба события из селектора исчезают обе сущности. Да и чтобы мое правило срабатывало при каждом расчете цены мне не надо.

Комментарии

Аватар пользователя serega111 serega111 17 июня 2013 в 7:13

в селекторе нет продукта, потому что событие предоставляет только термин.
Вам нужно вы actions загрузить товары (возможно, нужно использовать https://drupal.org/project/views_rules).
Потом нужно создать компонент типа Rule. В качестве параметра выберете commerce product, далее можно задать condition и action. Condition - Сущность имеет поле. Далее добавляете нужные action. После этого в основном правиле добавляете loop (вам же нужно по нескольким товарам пройтись), в loop добавляете action, в селекторе внизу будет список компонент, выберете тот, что создали.

Аватар пользователя Lavio Lavio 17 июня 2013 в 7:49

serega111 wrote:
Вам нужно вы actions загрузить товары (возможно, нужно использовать https://drupal.org/project/views_rules).

Возможно вы подскажите как лучше это сделать?)
У меня следующая ситуация:
Есть товары с полями свойств одно из них картинка для товара.
Есть Тип материала Дисплей товара для вывода этого товара пользователю. В самом материале есть поле куда записывается термин для группировки товаров и последующего вывода в представлениях.
Есть словарь с терминами у терминов есть поле картинки на группу товаров.

Моя задача
При обновлении термина все товары, у которых в типах материала есть этот термин, обновляют поле картинки если оно пустое на значение из поля термина если оно не пустое.

С условиями пустое/не пустое я знаю как разобраться, вот как получить группу записей не очень представляю. Первое что приходит в голову это получить все материалы (action: fetch entity by property) типа "Дисплей товара", у которых в поле для термина стоит термин, который обновился. Далее для каждой записи вытащить связь с товаром и проверить поле картинки, и выполнить действие обновления поля картинки если нужно.

То есть вижу логику и алгоритм, но не знаю как его реализовать. Или есть вариант попроще?
P.S. С упомянутым Вами модулем раньше не встречался.

Аватар пользователя serega111 serega111 17 июня 2013 в 9:23

Ставите этот модуль. Он позволит загружать view в rule.
Тут http://www.drupal.ru/node/100854 я уже описывал, как загрузить view в rule, используя контекстный фильтр по терминам, и создать цикл по view. В Вашем случае view немного усложниться, вам нужно еще и добавить relation для загрузки товара, привязанного к дисплею. В view в список полей добавьте product_id. В rule в цикле загружайте продукт и обновляйте поле

Аватар пользователя Lavio Lavio 24 июня 2013 в 4:30

serega111 wrote:
Ставите этот модуль. Он позволит загружать view в rule.
Тут http://www.drupal.ru/node/100854 я уже описывал, как загрузить view в rule, используя контекстный фильтр по терминам, и создать цикл по view. В Вашем случае view немного усложниться, вам нужно еще и добавить relation для загрузки товара, привязанного к дисплею. В view в список полей добавьте product_id. В rule в цикле загружайте продукт и обновляйте поле

Прочитал указанную вами тему. Не могу найти место где нужно сделать это:
Quote:
Оставить "содержимое", затем выбрать display "Rules".

То есть про содержимое понятно. Данный пункт нужно выбрать при создании самого представления. Вот где потом выбрать display "Rules"? И на сколько я понял именно эта настройка дает возможность выбрать конкретное представление в правиле? Потому что у мня уже есть созданные представления, но их нет в выпадающем списке при добавлении Views iterator display. Перерыл все настройки представления так и не нашел ни чего похожего. Искал как при создании нового представления так и в уже созданных.

Пример настроек представления:

Сам модуль views rules установлен и включен.

Еще вопрос:

Quote:
"Parameters: edit contextual filter info"
и
Quote:
"Row variables: edit field info"
появится после того как я выберу представление в Views iterator display?

Аватар пользователя serega111 serega111 24 июня 2013 в 11:47

"Lavio" wrote:
Прочитал указанную вами тему. Не могу найти место где нужно сделать это:

5й комментарий
"Lavio" wrote:
Вот где потом выбрать display "Rules"?

Нажимаете "Добавить", там в списке что то подобное будет (на знаю, как оно пишется в русифицированном друпале).
"Lavio" wrote:
И на сколько я понял именно эта настройка дает возможность выбрать конкретное представление в правиле?

да
"Lavio" wrote:
Еще вопрос:
Цитата:
"Parameters: edit contextual filter info"
и
Цитата:
"Row variables: edit field info"
появится после того как я выберу представление в Views iterator display?

появятся в средней колонку настроек view после того, как создадите display "Rules"

Аватар пользователя Lavio Lavio 24 июня 2013 в 12:56

serega111 wrote:
"Lavio" wrote:
Прочитал указанную вами тему. Не могу найти место где нужно сделать это:

5й комментарий
"Lavio" wrote:
Вот где потом выбрать display "Rules"?

Нажимаете "Добавить", там в списке что то подобное будет (на знаю, как оно пишется в русифицированном друпале).
"Lavio" wrote:
И на сколько я понял именно эта настройка дает возможность выбрать конкретное представление в правиле?

да
"Lavio" wrote:
Еще вопрос:
Цитата:
"Parameters: edit contextual filter info"
и
Цитата:
"Row variables: edit field info"
появится после того как я выберу представление в Views iterator display?

появятся в средней колонку настроек view после того, как создадите display "Rules"

Ок, все добавилось все выводится в привью представления как надо, в том числе id товара. Создал loop добавил туда action получить сущность по id, выбрал коммерц-товар. Дальше указал в идентификаторе через селектор данных имя переменной с id товара. Опять ступор, что дальше делать не понимаю. Мне нужно посмотреть значение поля с картинкой в товаре. Но это можно сделать только в условиях. А условие не видит того что мы получили в action.

Аватар пользователя Lavio Lavio 24 июня 2013 в 13:02

Мне нужно посмотреть значение поля с картинкой в товаре. Имеется в виду то, что нужно проверить что там записано. Стандартная картинка noimg.jpg или индивидуальная.

Аватар пользователя serega111 serega111 24 июня 2013 в 14:25

admin/config/workflow/rules/components тут добавляете компонент, выбираете плагин Rule, задаете входной параметр типа нода. Если нужен выходной параметр, тоже не забудьте добавить. Дальше есть возможность добавить условие - проверку существует поле или нет, затем нужный action. Потом в основном правиле добавляете action, внизу списка будет созданный компонент