Модуль для выполнения действий по таймеру.

Главные вкладки

Аватар пользователя sas@drupal.org sas@drupal.org 6 февраля 2009 в 18:11

Потребовалось по истечении 10 дней, после публикации материала автоматически снять материал с публикации (unpublish) и отправить об этом письма автору и администратору, модуль http://drupal.org/project/sched_act для 6 - не выпущен, написал небольшой свой.
Что делает ? С его помощью удалось по установленному значению таймера в действии переходить из одного состоянии документооборота (workflow) в другой и при этом выполняются нужные действия.
Требования:
Drupal 6;
модуль http://drupal.org/project/workflow;
регулярный запуск cron.php
Модуль в аттаче, описание примера в readme
Работает на "живом" сайте, замечания и пожелания приветствуются Smile

ВложениеРазмер
Иконка пакета workflow_timer.zip3.32 КБ

Комментарии

Аватар пользователя Vladimir_VVV Vladimir_VVV 7 февраля 2009 в 12:45

Я использую http://drupal.org/project/rules - он не только для запуска по таймеру, он может вешать действие на любое событие, и легко конфигурируется.
Поддерживает выполнение произвольного php кода.

Аватар пользователя sas@drupal.org sas@drupal.org 7 февраля 2009 в 21:15

"Vladimir_VVV" wrote:
Я использую 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) Можно ли Выполнять действия в зависимости от значения полей в "материале" ?

Аватар пользователя Vladimir_VVV Vladimir_VVV 8 февраля 2009 в 20:00

"<a href="mailto:sas@drupal.org">sas@drupal.org</a>" wrote:
2) Можно ли Выполнять действия в зависимости от значения полей в "материале" ?

Я этим модулем снимаю старые объявления с публикации по полю "Время публикации" но правда "своим" кодом на php.

Аватар пользователя Nikolas Nikolas 6 сентября 2010 в 11:37

"Vladimir_VVV" wrote:
Я этим модулем снимаю старые объявления с публикации по полю "Время публикации" но правда "своим" кодом на php.

А не поделитесь кодом?

Аватар пользователя Vladimir_VVV Vladimir_VVV 6 сентября 2010 в 23:46

"Nikolas" wrote:
А не поделитесь кодом?

Так это зависит от того как объявления сделаны, я делаю через

<?php
$node
=node_load($nid);
$node->status=0;// снимаем
node_save($node); // Сохранение
?>

а выборку по нодам обычным селектом и джойнами по полю срока размещения.

Аватар пользователя Nikolas Nikolas 11 сентября 2010 в 23:51

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

Аватар пользователя Vladimir_VVV Vladimir_VVV 12 сентября 2010 в 20:46

создаем поле "срок публикации" с выбором неделя, месяц, три месяца
неделя - 604800 сек
месяц - 2592000 сек
три - 7776000 сек

действие в rule вешаем на крон.

делаем выборку нод определенного типа которые опубликованы

если время_модификации меньше чем текущее_время минус количество_секунд_поля_срока_публикации то снимаем.

Аватар пользователя Nikolas Nikolas 13 сентября 2010 в 9:36

ааа, у вас так...
А мне бы надо в конкретный момент снимать, то есть у каждого материала он свой...
Так чтобы указать дату и в этот день она снялась...

Аватар пользователя Vladimir_VVV Vladimir_VVV 13 сентября 2010 в 20:48

"sashken" wrote:

node_expire[/module]
auto_expire[/module]

Так дело в том что rules нужен почти всегда, а CCK уж точно всегда и с помощью этого можно реализовать функционал node_expire и auto_expire, если добавить поле cck с датой съема и rules снимать по крону.

Аватар пользователя Nikolas Nikolas 16 сентября 2010 в 16:26

"Vladimir_VVV" wrote:
Так дело в том что rules нужен почти всегда, а CCK уж точно всегда и с помощью этого можно реализовать функционал node_expire и auto_expire, если добавить поле cck с датой съема и rules снимать по крону.

И как это реализовать?
Я как раз таки так и планировал, но что-то не вышло...

UPD:
Что-то залез еще раз в Rules и не обнаружил как можно по крону вообще взять какую-либо величину из ноды, то есть например взять поле с датой...

Аватар пользователя Vladimir_VVV Vladimir_VVV 18 сентября 2010 в 18:41

/admin/rules/trigger/add
заголовок:
Фускофф нода

Событие:
System
Cron maintenance tasks are performed

* Данное правило активно и выполняется при возникновении ассоциированного события.

Далее Rule elements

DO
"Добавить действие"
Выберите действие для добавления:
PHP
Execute custom PHP code

и ваш код, код подсказать не могу так как не знаю что у вас и как.

Аватар пользователя aparfilov aparfilov 22 мая 2011 в 15:00

"Nikolas" wrote:

Решил вопрос при помощи этого - 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