Действия по расписанию. Rules. VBO. Cron.

Достаточно часто возникают задачи, которые необходимо "решать" через определенный интервал времени.
К счастью, Drupal, из коробки наделен механизмом выполнения регулярных процедур "Cron" который в связке с нашими "любимыми" правилами позволяют с легкостью добиться нужного результата.
Рассмотрим как можно массово снять материалы опубликованные некоторое время назад, с главной страницы, с помощью Rules и Views Bulk Operations.
Смотрите так же пост о том, как планировать выполнение компонентов с помощью Rules Scheduler.
Шаг 1. Подготовка
Легенда:
- На сайте есть материал "Статья" (Article)
- По умолчанию, при создании, статья отмечается "Помещено на главную страницу"
- Нужно автоматически снять статью с главной через 12 часов
- Установлены модули Rules и Views Bulk Operations (VBO)
Включаем модули Rules, Rules UI и Views Bulk Operations.
Настраиваем на сервере или у хостера Cron на выполнение через нужный интервал. Допустим, каждый час.
Шаг 2. Создание компонента
Для начала нам нужно создать компонент, который будет выполнятся через нужные нам интервалы времени. Для этого переходим на страницу добавления компонента (admin/config/workflow/rules/components/add).
Плагин компонента - "Правило", жмем "Далее".
- Имя - "Снятие статьи с главной страницы"
- Машинное имя - "remove_article_from_frontpage"
Добавляем переменную материала:
- Тип данных - "Материал"
- Метка - "Материал"
- Машинное имя - "node"
- Использование - "Параметр"
Добавляем новое действие
Из списка доступных действий выбираем "Удалить материал с главной страницы".

В селекторе выбора содержимого выбираем "node" и сохраняем действие.

Компонент готов. Скриншот компонента.
Шаг 3. Создание представления VBO
Далее создадим представление, в котором будем выводить материалы добавленные более 12-ти часов назад и выведенные на главную. Именно по этому представлению Rules и будет пробегаться каждый раз при запуске Cron и убирать выводимые в нем материалы с главной страницы.
Добавить представление можно на странице "admin/structure/views/add".
- Имя представления - "VBO - материалы на главной"
- Машинное имя - "vbo_nodes_on_frontpage"
- Показать "Содержимое" тип содержимого "Статья", без сортировки
Ни страница ни блок нам не нужны, по этому просто сохраняем и переходим к редактированию представления. Скриншот добавления вьюхи.
Добавим фильтр по дате публикации.

В настройках фильтра:
- Оператор - "Меньше, чем"
- Тип значения - "Смещение от текущего времени"
- Значение - "-12 hours"
Еще один фильтр который нужно добавить, чтоб не выводились абсолютно все материалы - "Содержимое: Помещено на главную страницу".
В настройках фильтра отмечаем только помещенные на главную страницу материалы.
Далее, настроим количество материалов выводимых в представлении:

Будем выводить все материалы, без постраничной навигации:
Теперь главное - делаем это представление "представлением VBO". Добавляем поле "Массовые операции: Содержимое":

Настройки вносить не обязательно, просто сохраняем поле, а заодно и все представление. Скрниншот настроенного представления.
Шаг 4. Создание правила выполняющегося по Cron
Теперь можно перейти к автоматизации. Создаем новое правило (admin/config/workflow/rules/reaction/add).
- Имя - "Снятие материалов с главной страницы"
- Машинное имя - "remove_nodes_from_frontpage"
- Реакция на событие - "Выполняются регулярные процедуры Cron"
Добавляем действие, в котором извлечем материалы из нашего представления. Из списка действий выбираем "Загрузить список ID сущностей из VBO":

В настройках действия выбираем созданное нами ранее представление. Скриншот настроек.
Теперь нужно обработать каждую ноду в цикле. Добавляем в действия цикл:

В настройках цикла, в качестве списка выбираем извлеченный ранее список ID сущностей из представления VBO, и сохраняем настройки. Скриншот настроек цикла.
Далее, добавляем действие в цикл:
Нам нужно извлечь сущность и передать её в наш компонент. Поэтому, сначала, добавим действие "Извлечь сущность по ID":

Тип сущности выбираем "Материал" и жмем "Далее".

В настройках действия, в блоке "Идентификатор" переключаем режим выбора данных в селекторный:

В появившемся селекторе выбираем "Текущий элемент списка" (list-item). Скриншот настройки действия.
Добавляем в цикл еще один action - выполнение компонента, который мы создали во 2- шаге. Список компонентов можно найти в самом конце списка действий.

В настройках, в качестве материала выбираем извлеченный материал (entity-fetched):

Все. Правило настроено. Скриншот готового правила.
Теперь при запуске регулярных процедур будет обрабатываться и наше правило.
Делитесь полезными материалами в социальных сетях.