Drupal → Снятие материала с публикации после определённого срока с помощью Rules

11.04.2013

Дан материал с полем Срок публикации типа List (integer). В поле указывается число месяцев, через которые нода будет снята с публикации.

Задача — снять материал с публикации в нужный момент времени.

Для решения понадобятся модули Rules и Rules Scheduler (входит в состав Rules).

1. Добавляем новый Rules component типа Action set:

Форма добавления компонента

2. В созданный компонент добавляем новое действие Unpublish content:

Форма добавления действия

3. Создаём новое правило Rules с реакцией на After saving new content:

Форма создания правила Rules

4. Добавляем условие Entity has field и в качестве Field value выбираем поле Срок публикации (в примере это field_expire):

Форма добавления условия 'Entity has field'

5. Добавляем действие Add a variable:

6. Добавляем действие Calculate value, в котором считаем длительность публикации:

Вычисление длительность публикации

7. Добавляем действие Calculate value, в котором вычисляем дату депубликации:

Вычисление даты депубликации

8. Добавляем действие Schedule component evaluation:

Форма добавления действия 'Schedule component evaluation'

Profit.

По материалам видео Отложенное выполнение действий Rules с помощью модуля Rules Scheduler.

Вариант с помощью VBO и Views.

Похожие записи

Комментарии

всё же проще делать с помощью модуля Scheduler и hook_node_presave
ну и понятно добавления элемента node_form (селекта ,текстфилда или integer - в зависимости от задачи )

Гость
11.04.2013, 14:55

Подскажите если у меня дата в виде 3 числовых/текстовых полей. Можно ли по аналогии при достижении заданного дня +1, изменить значение поля ноды?

Гость
11.04.2013, 14:56

drupby, подскажите ваш вариант предложенного решения.

@Гость - если поле дата, то действие Calculate value, значение +1 day

Гость
11.04.2013, 16:15

Нет, как я писал выше дата -это 3 поля числовых/текстовых

@Ch я некоторые смотрел и ни один не может снимать по данным из поля с количеством месяцев. всем нужна точная дата

andypost@drupal.org
13.04.2013, 20:47

Гость, те каждый раз в голове вычислять через сколько опубликовать?
Тем кто боится рулов - нужно просто научиться их использовать, ибо в 8ке большая часть рулов уже в ядре

2. В созданный компонент добавляем новое действие Unpublish content:

сбился тут, потому что на картинке как раз и НЕ показано, как задать Unpublish content
Потом сам додумался.

Не подскажете, а как задать, что б действие исполнялось каждый час? Например, что б код php исполнялся на каждой 59 минуте (например)...
В чём проблема?
в том. что если просто на крон, то всякий раз, когда крон "дёрнет за верёвочку", то php исполнится.
А мне надо. что б только один раз! и даже если крон второй раз сработает, уже второй раз этот мой php не исполнялся...

дёргайте крон каждый час, проверяйте когда был прошлый запуск

спасибо! не привык ещё так мыслить, помогли.

Подскажите, а если надо организовать через компонент, имеет ли поле материала такое же значение в словаре таксономии. В материале это текстовое поле, они не связаны.
Какая примерно структура компонента должна быть?

2й день ломаю голову уже.

Есть тип материала "Статья". В нем есть поле ссылка.
Так же, есть 2 словаря таксономии "белый список url" и "черный список url"
При добавлении материала зарегистрированным пользователем, по умолчанию он НЕ опубликован, мы должны проверять:
если:
ссылка есть в белом списке ссылок-опубликовываем материал
ссылка есть в черном списке ссылок-удаляем материал и отправляем сообщение пользователю
нет ни в том, ни в том списке, ничего не делаем.

Ссылка в статье не связывается ни с каким словарем, просто поле. Вот.

Я понимаю что это можно сделать с помощью компонента, но до конца сделать так и не получается(

Помогите пожалуйста.

создаёте компонент типа Rule
входные параметры - Node и Taxonomy term
в условиях делаете проверку на словарь термина - "белый список url"
в действиях публикуете материал

создаёте второй аналогичный компонент только с проверкой на словарь "черный список url" и соответствующими действиями

создаёте обычный rules
в действиях добавляете Fetch entity by property и получаете термин по его имени
в действиях вызываете первый компонент
в действиях вызываете второй компонент

Прошу прощения, я впервые использую модуль rules, у меня такой вопрос:

Для проверки какой это словарь надо использовать условие:
"Сравнение данных" из подраздела "Данные" или "Тип сущности" из раздела "Сущность"?
И как указать какой именно мы словарь проверяем? И как мне указать определенный словарь?

Прошу прощения за свою назойливость......

Гость
29.10.2013, 00:54

Подскажите, пожалуйста!
Нужно через определенное время после создания ноды изменить термин. Создал правило, создал компонент, который меняет термин. Создаю ноды, в запланированных заданиях запись о будущем выполнении появляется, но изменения термина не происходит. Без планирования, а просто подключив компонент, все работает. Что это может быть? Как исправить?

А как быть если при редактировании ноди поменяли поле с месяцами?

Разобрался! Нужно перед 8 пунктом у правило добавить действие "Удалить запланированные задачи" с идентификатором задачи: [node:nid]

Игорь
19.04.2014, 11:57

На третьем шаге, сразу после выбора After saving new content получаю вот такую ошибку http://i.imgur.com/69gywN3.png. Если нажать "Ок" а затем "Save" то Fatal error: Unsupported operand types in Z:\home\drupal.my\www\includes\form.inc on line 2637

Я немного не понимаю. Таким способом конкретное поле установить нельзя? Поясню: я создал представление VBO, добавил Action set на его основе как entity-list, добавил цикл по entity-list, но там в принципе отсутствует проверка на тип сущности или наличие поля у сущности! И поля нужные не установить в принципе, даже ввода PHP-кода нет :(

Чёрт, немного не в ту тему написал. Но у меня не выходит ни одним способом :(

Всё, я всё-таки дошёл сам: без Conditional Rules ничего серьёзнее представленной задачи не сделать. :)

Сергей
21.08.2014, 15:31

Сейчас я с помощью VBO генерирую список "не актуальных" нод по дате добавления, затем через Rules обрабатываю его, меняю значение поля актуальности и делаю отправку E-mail автору материала. Соответственно, если человек добавил 10 материалов, ему отправится 10 емайлов.

Не хотелось бы спамить людей однообразными письмами.

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

Привет!
Замучился искать. Подскажите, пожалуйста, как называется Ajax модуль, который для админа добавляет ссылки под нодой - опубликовать, поместить на главную....
Типа модуля moderation, но только под каждой нодой.
Спасибо!

не подскажете как снять материал с публикации если его отредактировал Автор? В дальнейшем админ должен проверить отредактированный материал и опубликовать уже его

Пробуй через условие. Если uid текущего пользователя равно uid автору, то снять с публикации

Сергей
10.12.2015, 17:06

Не могу понять откуда брать поле Срок публикации, все делаю ничего не получается может что-то не то делаю

Сергей
10.12.2015, 20:52

Это мы знаем, а само поле срок публикации, либо дату откуда брать? Дата публикации сама по себе в системе сидит, а как ее вывести в поле?

Сергей
12.12.2015, 21:51

Извиняюсь, не правильно понял. Надо в тип материала добавить поле список/целые числа. Еще вопрос, а как сделать снятие материала с момента заново опубликованной старой статьи? ни кто не сталкивался с данной проблемой?

Михаил
24.01.2017, 14:35

Дан материал с полем Срок публикации типа List (integer)
Вот это не понимаю! Нужно такое поле создать или что? Числовое поле с целыми числами? Что тогда в нем указывать?

Создайте числовое поле. Указывайте число месяцев.

Михаил
24.01.2017, 16:53

То есть, просто цифру туда вписать?

ну а что вы ещё сможете вписать в числовое поле?

Михаил
24.01.2017, 16:59

Может, я про токены или еще какие настройки не знаю ) Хорошо. Сейчас попробую!
Спасибо за ответ.

Михаил
24.01.2017, 17:17

А ставить список выбора или флажки?
И почему именно список? Если несколько значений поставить я якобы смогу выбирать срок публикации?

Михаил
24.01.2017, 18:09

Прошу прощения за спам.
Все работает отлично! Только вопрос - как то это поле со страницы создания материала можно скрыть?

Михаил, можно.

Посмотрите на этот модуль. Модуль позволяет настроить доступ к полям. Например указать, что данное поле доступно только пользователям с определенной ролью.

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

А как еще добавить отправку сообщения пользователю о том, что материал будет снят через такое то время?

Добавить комментарий