Как использовать планировщик правил для отключения и включения объекта коммерческого продукта на основе определенных полей даты?
У меня есть тип коммерческого продукта (объект, не отображаемый узел) с двумя полями даты (enable_date и disable_date). Каковы шаги по созданию правила/компонента и использованию планировщика правил для планирования их отключения и включения этих продуктов на основе значений этих двух полей?
Вариант использования заключается в том, что у меня есть узел событий (отображение продукта), который всегда должен быть доступен для просмотра, но прикрепленная регистрация (сущность продукта) должна быть отключена в определенном день/время. т. е. Регистрация теперь закрыта, но пользователи все еще могут видеть информацию о событии, такую как местоположение, карта и т.д. Используя планировщик правил, я уверен, что смогу это сделать. Я пробовал со смешанными результатами, но я все еще изучаю модуль правил. Любая помощь будет признательна.
3 answers
Сначала создайте компонент Правил для установки статуса продукта.
- Перейдите в раздел Конфигурация -> Рабочий процесс -> Правила -> Компоненты -> Добавить новый компонент.
- Создайте набор действий .
- Присвойте компоненту подходящее имя, например
Set product status
. - Создайте параметр типа Коммерческий продукт , метку
Product
, имя машиныproduct
; и другой тип Значение истинности , меткаStatus
, имя машиныstatus
. - Добавить действие: Задать значение данных
- Для данных используйте селектор данных, чтобы выбрать статус параметра продукта (
product:status
). - Для Значения используйте селектор данных, чтобы выбрать параметр состояния (
status
). - Сохранить
Теперь у вас есть компонент, который можно запланировать. Далее вам нужно запустить создание запланированного действия. Я собираюсь описать процесс включения продукт; вы должны быть в состоянии создать другое правило для отключения достаточно легко, следуя тому же методу.
- Перейдите в раздел Конфигурация -> Рабочий процесс -> Правила -> Добавить новое правило
- Выберите триггеры После сохранения нового коммерческого продукта и После обновления существующего коммерческого продукта.
- Добавьте условие Сущность имеет поле.
- Для Сущности используйте селектор данных, чтобы выберите commerce-продукт в качестве объекта.
- Для поля используйте раскрывающийся список, чтобы выбрать поле даты начала.
- Добавить условие Значение данных пустое.
- Для Данных для проверки используйте селектор данных, чтобы выбрать поле даты начала.
- Установите флажок Отменить (мы хотим продолжить, только если поле не пустое)
- Добавьте другое условие Сравнение данных и выберите поле даты начала больше чем
site:current-date
- Добавить действие Запланировать оценку компонента.
- Для компонента выберите компонент, созданный ранее.
- Для Запланированной даты оценки используйте селектор данных, чтобы получить дату начала.
- Для идентификатора выберите что-то вроде
Enable product [commerce-product:product-id]
- Для Статуса установите флажок.
- Для Продукта используйте селектор данных, чтобы выбрать
commerce-product
.
Затем для того, чтобы удалить запланированное действие, если дата удалена из поля:
- Выполните шаги 1-7 (но не 8!) непосредственно выше, чтобы создать новое правило.
- Добавление действия Удаление запланированных задач.
- Для компонента выберите компонент, созданный ранее.
- Для идентификатора используйте ту же строку, что и раньше.
И еще одно правило для удаления запланированного действия, когда продукт удален, было бы неплохо тоже.
Я быстро дал этому ход, и, похоже, это работает для меня. Дайте мне знать, если у вас возникнут какие-либо проблемы.
Вот что я делал в прошлом, и я думаю, что это поможет вам получить идентификаторы ваших продуктов без необходимости просматривать каждый отдельный продукт.
Вы можете использовать VBO для загрузки списка идентификаторов сущностей в свое представление, которое вы можете просмотреть. Вы можете прочитать, как это сделать здесь: http://nodeone.se/sv/node/777
Это позволит вам создать два представления для возврата идентификаторов сущностей для ваших продуктов, включающих сегодня и отключающих сегодня.
Затем создайте свое ПРАВИЛО, чтобы огонь во время cron или что-то в этом роде, до тех пор, пока это происходит один раз в день.
Добавьте свое действие для загрузки списка объектов сущностей через отображение VBO. Добавьте цикл на основе этого списка параметров цикла. По умолчанию используется значение "entity_list". Добавьте действие для цикла, чтобы выполнить итерацию по списку сущностей, который является вашей сущностью продукта, чтобы либо отключить, либо включить продукт. Выберите Данные -> Установите значение
Как только вы войдете в часть "Установить значение", вы увидите, как появится селектор данных "список сущностей", и вы сможете установить значение для включения или отключения для w/e, которое вам нужно.
Надеюсь, это приведет вас туда, где вам нужно быть, дайте мне знать, если вы застряли.
Просто небольшое дополнение, вы можете добавить оба представления VBO в одно правило. Один дисплей VBO выводит все продукты, которые необходимо включить сегодня, которые вы просматриваете, а затем вы можете создать другое действие для вывода дисплея VBO, который отключает продукты на сегодня. Таким образом, это будет работать каждый день, включая/выключая ваши продукты, и вы никогда нужно беспокоиться о планировании чего-либо.
Я также нашел хороший ответ на этот вопрос в группах Drupal. Это действительно хорошая дискуссия о создании правила в Drupal 7. Получите остальную часть материала по адресу https://groups.drupal.org/node/240678 .