Потребовалось по истечении 10 дней, после публикации материала автоматически снять материал с публикации (unpublish) и отправить об этом письма автору и администратору, модуль http://drupal.org/project/sched_act для 6 - не выпущен, написал небольшой свой.
Что делает ? С его помощью удалось по установленному значению таймера в действии переходить из одного состоянии документооборота (workflow) в другой и при этом выполняются нужные действия.
Требования:
Drupal 6;
модуль http://drupal.org/project/workflow;
регулярный запуск cron.php
Модуль в аттаче, описание примера в readme
Работает на "живом" сайте, замечания и пожелания приветствуются
Вложение | Размер |
---|---|
workflow_timer.zip | 3.32 КБ |
Комментарии
Я использую http://drupal.org/project/rules - он не только для запуска по таймеру, он может вешать действие на любое событие, и легко конфигурируется.
Поддерживает выполнение произвольного php кода.
Спасибо за интерсную информацию, читаю ...
The rules modules allows site administrators to define conditionally executed actions based on occurring events (ECA-rules). It's a replacement with more features for the trigger module in core and the successor of the workflow-ng module.
... замена trigger module ...
1) А как впечатления от использования на нагруженных проектах ?
2) Можно ли Выполнять действия в зависимости от значения полей в "материале" ?
Я этим модулем снимаю старые объявления с публикации по полю "Время публикации" но правда "своим" кодом на php.
А не поделитесь кодом?
Так это зависит от того как объявления сделаны, я делаю через
<?php
$node=node_load($nid);
$node->status=0;// снимаем
node_save($node); // Сохранение
?>
а выборку по нодам обычным селектом и джойнами по полю срока размещения.
Да снять то с публикации - понятно, а вот как установить момент кагда нужно снимать я не разобрался чет...
создаем поле "срок публикации" с выбором неделя, месяц, три месяца
неделя - 604800 сек
месяц - 2592000 сек
три - 7776000 сек
действие в rule вешаем на крон.
делаем выборку нод определенного типа которые опубликованы
если время_модификации меньше чем текущее_время минус количество_секунд_поля_срока_публикации то снимаем.
ааа, у вас так...
А мне бы надо в конкретный момент снимать, то есть у каждого материала он свой...
Так чтобы указать дату и в этот день она снялась...
Так дело в том что rules нужен почти всегда, а CCK уж точно всегда и с помощью этого можно реализовать функционал node_expire и auto_expire, если добавить поле cck с датой съема и rules снимать по крону.
И как это реализовать?
Я как раз таки так и планировал, но что-то не вышло...
UPD:
Что-то залез еще раз в Rules и не обнаружил как можно по крону вообще взять какую-либо величину из ноды, то есть например взять поле с датой...
/admin/rules/trigger/add
заголовок:
Фускофф нода
Событие:
System
Cron maintenance tasks are performed
* Данное правило активно и выполняется при возникновении ассоциированного события.
Далее Rule elements
DO
"Добавить действие"
Выберите действие для добавления:
PHP
Execute custom PHP code
и ваш код, код подсказать не могу так как не знаю что у вас и как.
Решил вопрос при помощи этого - http://drupal.org/node/520012
Правда немного путанно работает с часовыми поясами...
надо разбираться...
Да, с часовыми поясами есть неприятный момент. Добавил поле CCK+Date, настроил. С триггером
[node:field_deldate-date]
- работает. НО! У меня часовой пояс GMT+6. Соответственно, если я ставлю дату снятия материала 23/05/2001, то в планировщике(/admin/rules/rule_sets/scheduling) это выглядит так: 23/05/2001 06:00:00. То есть автоматом прибавляет 6 часов.Как сделать так, чтобы бралась введенная дата из соответствующего поля в материале и к ней прибавлялось столько времени, чтобы получилось действие ноды "включительно". То есть, если ставится дата 23/05/2011(время я не ставлю) то в планировщике будет стоять 24/05/2011 00:01:00
а с главной как снять у всех нод???
rules