Категория:
Опубликовано:

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

Rules Cron VBO

Достаточно часто возникают задачи, которые необходимо "решать" через определенный интервал времени.

К счастью, 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":

Извлечение материалов из представления VBO

В настройках действия выбираем созданное нами ранее представление. Скриншот настроек.

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

Добавление цикла

В настройках цикла, в качестве списка выбираем извлеченный ранее список ID сущностей из представления VBO, и сохраняем настройки. Скриншот настроек цикла.

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

Добавить действие в цикл

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

Извлечь сущность по ID

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

Выбор типа сущности

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

Переключить режим данных

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

Добавляем в цикл еще один action - выполнение компонента, который мы создали во 2- шаге. Список компонентов можно найти в самом конце списка действий.

Выполнить компонент

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

Настрока действия - Выполнение компонента

Все. Правило настроено. Скриншот готового правила.

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

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.