Как использовать планировщик правил для отключения и включения объекта коммерческого продукта на основе определенных полей даты?


У меня есть тип коммерческого продукта (объект, не отображаемый узел) с двумя полями даты (enable_date и disable_date). Каковы шаги по созданию правила/компонента и использованию планировщика правил для планирования их отключения и включения этих продуктов на основе значений этих двух полей?

Вариант использования заключается в том, что у меня есть узел событий (отображение продукта), который всегда должен быть доступен для просмотра, но прикрепленная регистрация (сущность продукта) должна быть отключена в определенном день/время. т. е. Регистрация теперь закрыта, но пользователи все еще могут видеть информацию о событии, такую как местоположение, карта и т.д. Используя планировщик правил, я уверен, что смогу это сделать. Я пробовал со смешанными результатами, но я все еще изучаю модуль правил. Любая помощь будет признательна.

Author: Nigel Waters, 2013-03-06

3 answers

Сначала создайте компонент Правил для установки статуса продукта.

  1. Перейдите в раздел Конфигурация -> Рабочий процесс -> Правила -> Компоненты -> Добавить новый компонент.
  2. Создайте набор действий .
  3. Присвойте компоненту подходящее имя, например Set product status.
  4. Создайте параметр типа Коммерческий продукт , метку Product, имя машины product; и другой тип Значение истинности , метка Status, имя машины status.
  5. Добавить действие: Задать значение данных
  6. Для данных используйте селектор данных, чтобы выбрать статус параметра продукта (product:status).
  7. Для Значения используйте селектор данных, чтобы выбрать параметр состояния (status).
  8. Сохранить

Теперь у вас есть компонент, который можно запланировать. Далее вам нужно запустить создание запланированного действия. Я собираюсь описать процесс включения продукт; вы должны быть в состоянии создать другое правило для отключения достаточно легко, следуя тому же методу.

  1. Перейдите в раздел Конфигурация -> Рабочий процесс -> Правила -> Добавить новое правило
  2. Выберите триггеры После сохранения нового коммерческого продукта и После обновления существующего коммерческого продукта.
  3. Добавьте условие Сущность имеет поле.
  4. Для Сущности используйте селектор данных, чтобы выберите commerce-продукт в качестве объекта.
  5. Для поля используйте раскрывающийся список, чтобы выбрать поле даты начала.
  6. Добавить условие Значение данных пустое.
  7. Для Данных для проверки используйте селектор данных, чтобы выбрать поле даты начала.
  8. Установите флажок Отменить (мы хотим продолжить, только если поле не пустое)
  9. Добавьте другое условие Сравнение данных и выберите поле даты начала больше чем site:current-date
  10. Добавить действие Запланировать оценку компонента.
  11. Для компонента выберите компонент, созданный ранее.
  12. Для Запланированной даты оценки используйте селектор данных, чтобы получить дату начала.
  13. Для идентификатора выберите что-то вроде Enable product [commerce-product:product-id]
  14. Для Статуса установите флажок.
  15. Для Продукта используйте селектор данных, чтобы выбрать commerce-product.

Затем для того, чтобы удалить запланированное действие, если дата удалена из поля:

  1. Выполните шаги 1-7 (но не 8!) непосредственно выше, чтобы создать новое правило.
  2. Добавление действия Удаление запланированных задач.
  3. Для компонента выберите компонент, созданный ранее.
  4. Для идентификатора используйте ту же строку, что и раньше.

И еще одно правило для удаления запланированного действия, когда продукт удален, было бы неплохо тоже.

Я быстро дал этому ход, и, похоже, это работает для меня. Дайте мне знать, если у вас возникнут какие-либо проблемы.

 12
Author: Andy, 2013-03-14 19:11:37

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

Вы можете использовать VBO для загрузки списка идентификаторов сущностей в свое представление, которое вы можете просмотреть. Вы можете прочитать, как это сделать здесь: http://nodeone.se/sv/node/777

Это позволит вам создать два представления для возврата идентификаторов сущностей для ваших продуктов, включающих сегодня и отключающих сегодня.

Затем создайте свое ПРАВИЛО, чтобы огонь во время cron или что-то в этом роде, до тех пор, пока это происходит один раз в день.

Добавьте свое действие для загрузки списка объектов сущностей через отображение VBO. Добавьте цикл на основе этого списка параметров цикла. По умолчанию используется значение "entity_list". Добавьте действие для цикла, чтобы выполнить итерацию по списку сущностей, который является вашей сущностью продукта, чтобы либо отключить, либо включить продукт. Выберите Данные -> Установите значение

Как только вы войдете в часть "Установить значение", вы увидите, как появится селектор данных "список сущностей", и вы сможете установить значение для включения или отключения для w/e, которое вам нужно.

Надеюсь, это приведет вас туда, где вам нужно быть, дайте мне знать, если вы застряли.

Просто небольшое дополнение, вы можете добавить оба представления VBO в одно правило. Один дисплей VBO выводит все продукты, которые необходимо включить сегодня, которые вы просматриваете, а затем вы можете создать другое действие для вывода дисплея VBO, который отключает продукты на сегодня. Таким образом, это будет работать каждый день, включая/выключая ваши продукты, и вы никогда нужно беспокоиться о планировании чего-либо.

 1
Author: iLLin, 2013-03-09 14:16:16

Я также нашел хороший ответ на этот вопрос в группах Drupal. Это действительно хорошая дискуссия о создании правила в Drupal 7. Получите остальную часть материала по адресу https://groups.drupal.org/node/240678 .

 0
Author: WaQaR Ali, 2015-09-03 06:10:53