xandeadx.ru Блог музицирующего веб-девелопера

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

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

Дан материал с полем Срок публикации типа 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.

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

Комментарии RSS

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

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

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

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

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

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

А зачем снимать по данным из поля если можно задать точный день месяц год снятия в модуле http://drupal.org/project/scheduler

Гость, зачем вода мокрая?

Гость, те каждый раз в голове вычислять через сколько опубликовать?
Тем кто боится рулов - нужно просто научиться их использовать, ибо в 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, у меня такой вопрос:

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

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

условие - Entity is of bundle

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

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

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

На третьем шаге, сразу после выбора 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 ничего серьёзнее представленной задачи не сделать. :)

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

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

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

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

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

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

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании