DEMETR Создание сайтов в Казани

Опубликовано

Автоматизация сайта на Drupal через Rules

Продолжаем делать сайты на Drupal и в этой статье опишу метод, который позволяет запланировать определенные действия на сайте. Это может быть снятие с публикации определенного материала, блокировка пользователя и многое другое. Рассмотрим следующий реальный пример: Сайт журнала публикует статьи, и среди них могут встретиться рекламные. То есть рекламодатель обращается к администратору с просьбой разместить рекламную статью о его товаре сроком на 1 неделю. Условия следующие:

  • статья закреплена на главной странице в блоке «Последние статьи» и никак не выделяется.
  • в общем списке статья выделена желтым фоном.
  • после указанного срока статья снимается с главной и у нее убирается желтый фон в списке всех материалов (т.е. владалец сайта получает помимо денег еще и неплохую статью по своей тематике).

Все согласны, ударили по рукам, оплатили размещение статьи. Разместили. Потом вторую, десятую. И тут голова администратора начинает пухнуть: какую статью снять с главной и отключить желтый фон. Было бы неплохо еще и уведомить рекламодателя о скором отключении, вдруг захочет продлить. Все эти действия можно и нужно автоматизировать. Поможет нам в этом деле модуль Rules. Речь идет о Drupal 7, но есть и для 6-ой версии. Устанавливаем модуль, активируем. В своем примере пришлось использоваться еще один модуль — Conditional Fields. При создании статьи автор ставит чекбокс напротив поля «Рекламная статья» и ему показываются доп.поля:

  • E-mail заказчика
  • Дата окончания публикации (еще и модуль Date нужен)

Поле «Рекламная статья» имеет тип «Логический» и может иметь значения 0 или 1. Через Conditional Fields реализовано появление этих дополнительных двух полей. Если статья не рекламная, то и видеть эти поля не нужно.

Идем дальше и переходим наконец-то к созданию правил. Переходим на страницу /admin/config/workflow/rules/components (Конфигураця — Rules — Components), создаем новый компонент.

Пишем как на скриншоте:

Далее добавляем действия:

Добавили Condition, затем ссылка Add if. И делаем проверку «Если содержимое имеет поле Рекламная статья», то … Добавляем действие (Add action) «Send mail».

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

Уведомление настроили. Делаем другой компонент как на скриншоте:

Почти тоже самое, только здесь используется еще и метод «Set a data value». Этим методом мы снимаем чекбокс с поля.

Теперь переходим в Rules /admin/config/workflow/rules Создаем новое правило (Add new rule), даем ему имя, делаем активным. Вот так выглядят Events и Conditions этого правила:

После сохранения или обновления контента у нас будет происходить наша проверка при условии, что контент имеет тип «Статья» и имеет поле «Дата окончания публикации».

Ниже добавляем два Action типа «Shedule component evaluation». Это действия создаст запланированное правило.

После выбора этого элемента из списка откроется страница, на которой нужно выбрать созданный ранее компонент (у нас их два: уведомление и отключение).

Настройки далее предельно просты, и лучше сделать их самому, чтобы лучше понять принцип работы модуля Rules.

Рубрики КодМетки

Автоматизация сайта на Drupal через Rules: 8 комментариев

  • Эрли — 23.05.2014 в 11:05 #

    А как нам сделать, так чтобы в письме пользователю указывалась бы дата окончания публикации и название публикации?
    Типа такого:
    Уважаемый клиент сайта!
    Срок публикации вашей статьи [токен_названия] истекает [токен_даты]. Предлагаем вам продлить размещение.

    [Ответить]

    Demetr - Май 23rd, 2014 в 11:12

    А в чем сложность? Когда выбираете действие «Отправить e-mail» под каждым полем (от кого, кому, тема, сообщение) есть Replacement patterns. Открывайте его, и там все доступные токены.

    Если все настроено правильно, то будут доступны токены всех полей ноды.

    [Ответить]

    Эрли - Май 23rd, 2014 в 11:15

    Да, с этим разобрался, просто вначале не заметил допустимых токенов, т.к. они были свёрнуты.
    Но вот что заметил: когда значение филда множественное, то токен выводит только ПЕРВОЕ значение. А остальные не выводятся…

    [Ответить]

    Demetr - Май 23rd, 2014 в 11:39

    Сейчас проверил. Поставил в тело письма токен из поля с множественным значением (через чекбокс) в письме через запятую пришли выбранные значения.

  • Эрли — 23.05.2014 в 12:20 #

    Я прошу прощения, что не уточнил.
    У меня Drupal 6, CCK3 и сделаны мультиполя. Т.е. в одной строке несколько полей. И в данном случае выводятся только первые значения.

    [Ответить]

    Demetr - Май 23rd, 2014 в 16:53

    По 6-ой версии не могу сказать, давно не использовал.

    [Ответить]

  • Максим — 21.10.2014 в 10:19 #

    метод «Set a data value» Нет поля в моём случае field_vip. Что делать?

    [Ответить]

    Demetr - Октябрь 21st, 2014 в 10:24

    Делайте по инструкции внимательно. У меня с первого раза тоже не все гладко было. Скорее всего ошибка в настройках:
    https://lh3.googleusercontent.com/-NXSqhAHUmoE/UfDd0OuO5KI/AAAAAAAACak/j-lx6H95Aq0/s935/4.png

    Посмотрите внимательно на последние настройки «Variables», через эту приблуду в токенах должен появится доступ к вашим полям.

    [Ответить]