Дан материал с полем Срок публикации типа List (integer). В поле указывается число месяцев, через которые нода будет снята с публикации.
Задача — снять материал с публикации в нужный момент времени.
Для решения понадобятся модули Rules и Rules Scheduler (входит в состав Rules).
1. Добавляем новый Rules component типа Action set:
2. В созданный компонент добавляем новое действие Unpublish content:
3. Создаём новое правило Rules с реакцией на After saving new content:
4. Добавляем условие Entity has field и в качестве Field value выбираем поле Срок публикации (в примере это field_expire
):
5. Добавляем действие Add a variable:
6. Добавляем действие Calculate value, в котором считаем длительность публикации:
7. Добавляем действие Calculate value, в котором вычисляем дату депубликации:
8. Добавляем действие Schedule component evaluation:
Profit.
По материалам видео Отложенное выполнение действий Rules с помощью модуля Rules Scheduler.
- Рассылка списка новых материалов за день/неделю/месяц с помощью Simplenews и Rules (способ 2)
- Пример совместной работы Rules/VBO/Views — удаление статуса "sticky" у старых нод (видео)
- Добавить своё действие над сущностью в bulk operations
- Добавить своё действие над сущностью в contextual links
- Добавить своё действие над сущностью в operations links
Комментарии
всё же проще делать с помощью модуля Scheduler и hook_node_presave
ну и понятно добавления элемента node_form (селекта ,текстфилда или integer - в зависимости от задачи )
Подскажите если у меня дата в виде 3 числовых/текстовых полей. Можно ли по аналогии при достижении заданного дня +1, изменить значение поля ноды?
drupby, подскажите ваш вариант предложенного решения.
@Гость - если поле дата, то действие Calculate value, значение
+1 day
Нет, как я писал выше дата -это 3 поля числовых/текстовых
Для тех кто не любит Rules:
@Ch я некоторые смотрел и ни один не может снимать по данным из поля с количеством месяцев. всем нужна точная дата
А зачем снимать по данным из поля если можно задать точный день месяц год снятия в модуле http://drupal.org/project/scheduler
Гость, зачем вода мокрая?
Гость, те каждый раз в голове вычислять через сколько опубликовать?
Тем кто боится рулов - нужно просто научиться их использовать, ибо в 8ке большая часть рулов уже в ядре
сбился тут, потому что на картинке как раз и НЕ показано, как задать 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, но только под каждой нодой.
Спасибо!
https://www.drupal.org/project/fasttoggle
не подскажете как снять материал с публикации если его отредактировал Автор? В дальнейшем админ должен проверить отредактированный материал и опубликовать уже его
Пробуй через условие. Если uid текущего пользователя равно uid автору, то снять с публикации
Не могу понять откуда брать поле Срок публикации, все делаю ничего не получается может что-то не то делаю
http://niklan.net/blog/13
Это мы знаем, а само поле срок публикации, либо дату откуда брать? Дата публикации сама по себе в системе сидит, а как ее вывести в поле?
Извиняюсь, не правильно понял. Надо в тип материала добавить поле список/целые числа. Еще вопрос, а как сделать снятие материала с момента заново опубликованной старой статьи? ни кто не сталкивался с данной проблемой?
Дан материал с полем Срок публикации типа List (integer)
Вот это не понимаю! Нужно такое поле создать или что? Числовое поле с целыми числами? Что тогда в нем указывать?
Создайте числовое поле. Указывайте число месяцев.
То есть, просто цифру туда вписать?
ну а что вы ещё сможете вписать в числовое поле?
Может, я про токены или еще какие настройки не знаю ) Хорошо. Сейчас попробую!
Спасибо за ответ.
А ставить список выбора или флажки?
И почему именно список? Если несколько значений поставить я якобы смогу выбирать срок публикации?
Прошу прощения за спам.
Все работает отлично! Только вопрос - как то это поле со страницы создания материала можно скрыть?
Михаил, можно.
Посмотрите на этот модуль. Модуль позволяет настроить доступ к полям. Например указать, что данное поле доступно только пользователям с определенной ролью.
Второй способ это сделать тоже самое вручну: написать form_alter для формы создания годы и там скрыть его в зависимости от условия, нужного Вам. Например скрыть поле для всех пользователей, кроме суперадмина.
А как еще добавить отправку сообщения пользователю о том, что материал будет снят через такое то время?
Добавить комментарий