Хочу создать правило
event: Выполняются регулярные задачи CRON
Состояния: тип материала %тип материала% & В материале существует поле даты & поле даты больше определённого значения
Действие: снять закрепленность/удалить со стартовой или иные действия.
Проблема в селекторах данных которые меня не пускают на следующие этапы.
В них предлагается только site: и всё.
Нашёл похожую [#102723]проблему[/#], но решение мне не понятно.
Пытался просто сослаться на наличие поля, что бы дало мне эти селекторы
Получилось следующее:
Параметр: Материал: [site:current-user], Поле: field_date
В нём тоже нужно выбирать селектор, но единственный доступный [site:current-user] пропустил.
При этом создавая новые условия, новых селекторов не прибавляется.
1. Объясните мне на русском, что такое селекторы и зачем они нужны!
2. Подскажите как решить конкретно мою задачу. [module=auto_expire] не предлагать.
Мой опыт rules пока ограничивается [#109073]этим[/#].
Комментарии
Действительно, не получается сделать с этим event.
Попробуйте сделать используя Rules Scheduler и установите нужную частоту срабатывания компоненты.
Так. Это возвращает меня к Компонентам. Шедулер работает только с ними.
Придётся всё-таки гуглить эти "компоненты"
Так. Создал "Конфигурация условия (И)". Добавил своих условий. Пытаюсь добавить эти условия в обычное правило, и снова не хватает селекторов...
Видимо надо было создавать компонент типа "правило". Пойду попробую
Опять не то. Где тот пункт, который можно подсунуть планировщику?!
Хотя бы даёт нужные мне селекторы. но как запускать это правило я не понимаю
"LABEL" : "test3",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "node" : { "label" : "node", "type" : "node" } },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "event" : "event" } } } },
{ "entity_has_field" : { "entity" : [ "node" ], "field" : "field_date" } },
{ "node_is_published" : { "node" : [ "node" ] } },
{ "data_is" : {
"data" : [ "node:field-date:value2" ],
"op" : "\u003E",
"value" : [ "site:current-date" ]
}
}
],
"DO" : [
{ "node_unpromote" : { "node" : [ "node" ] } },
{ "node_make_unsticky" : { "node" : [ "node" ] } }
]
}
}
Посмотрите http://xandeadx.ru/blog/drupal/649 может поможет.
не то мне кажется. У него стоит "после сохранения материала".
А мне надо периодичность. я уже вышел на шедулер, но он однократный.
vbo - http://vimeo.com/29672643
Так. Второй вариант. на сколько это п...ц?!
"LABEL" : "unpromote_unsticky",
"PLUGIN" : "reaction rule",
"ACTIVE" : false,
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "node_view--event" : { "bundle" : "event" } },
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "event" : "event" } } } },
{ "node_is_published" : { "node" : [ "node" ] } },
{ "entity_has_field" : { "entity" : [ "node" ], "field" : "field_date" } },
{ "data_is" : {
"data" : [ "node:field-date:value2" ],
"op" : "\u003E",
"value" : [ "site:current-date" ]
}
}
],
"DO" : [
{ "node_unpromote" : { "node" : [ "node" ] } },
{ "node_make_unsticky" : { "node" : [ "node" ] } }
]
}
}
Потестировал на локальной копии.
В правиле ошибся. надо знак сравнения в обратную сторону повернуть...
Вот лог:
" Reacting on event После просмотра материала.
0 ms Reacting on event После просмотра материала.
Rule Снятие с главной мероприятия по истечению даты fires. [edit]11.455 ms Evaluating conditions of rule Снятие с главной мероприятия по истечению даты. [edit]
12.293 ms The condition node_is_of_type evaluated to TRUE [edit]
12.405 ms The condition node_is_published evaluated to TRUE [edit]
13.542 ms The condition entity_has_field evaluated to TRUE [edit]
17.331 ms The condition data_is evaluated to TRUE [edit]
17.341 ms AND evaluated to TRUE.
"
0 ms Rule Снятие с главной мероприятия по истечению даты fires.
0.083 ms Evaluating the action node_unpromote. [edit]
34.187 ms Evaluating the action node_make_unsticky. [edit]
67.416 ms Rule Снятие с главной мероприятия по истечению даты has fired.
84.801 ms Saved node of type node.
" Reacting on event После редактирования существующего элемента. [edit]
0 ms Reacting on event После редактирования существующего элемента.
0.219 ms Evaluating conditions of rule Дата События. [edit]
0.228 ms AND evaluated to TRUE.
" Rule Дата События fires. [edit]
0 ms Rule Дата События fires.
0.549 ms Evaluating the action data_set. [edit]
0.657 ms Rule Дата События has fired.
0.921 ms Saved node of type node.
" Reacting on event После редактирования существующего элемента. [edit]
0 ms Reacting on event После редактирования существующего элемента.
0.217 ms Not evaluating reaction rule Дата События to prevent recursion. [edit]
0.227 ms Finished reacting on event После редактирования существующего элемента.
89.862 ms Finished reacting on event После редактирования существующего элемента.
722.226 ms Finished reacting on event После просмотра материала.
Думаю добавить условий на наличие флагов, что бы лишний раз не применялось, но правило будет активироваться каждый раз
Там срабатывает ещё одно правило, но вроде сильно не мешает.
Очень хочется послушать мнения.
Радует только одно. Оно работает.
del
на работе видео блокируется. дома посмотрю что за оно.
До видео не добрался. Почитал коротко про VBO+rules на русском http://xandeadx.ru/blog/drupal/453
Возможно и оно, но нужен новый модуль... У меня их и так как насрано
Пока вот моё правило на основе моего же вчерашнего.
Добавил пустое текстовое поле в тип материала, которое при выполнении правила заполняется фразой, что событие устарело и темизация как "message ok". В условия добавил проверку на отсутствие наличия этого текста. Так же вываливается сообщение друпала типа "статус", что событие устарело.
Криво конечно...
Добавил крон в своё правило. Ругается в журнал, но работает. В итоге событие "node_view--event" является просто подспорьем, что бы прицепить параметр node.
Главное,что бы в очередном обновлении модуля или ядра эту фичу не потёрли.
А кто мешает написать модуль, который в hook_cron будет выполнять твою задачу за 5 строк?
ну, например, то что я не программист
С другой стороны я не понимаю, почему такая очевидная вещь как периодическая сработка правил должна вызывать призыв высших сил, хуков и говна на голову. Вроде бы степень важности и необходимости rules ничуть не ниже чем у views, но второй суперский, понятный (или хотя бы можно понять), а первый выглядит как кусок необработанной руды (хотел написать другой слово).
Видимо, есть некая мораль в том что бы требовать некие селекторы данных, но я её не понимаю. Почему я не могу взять поле какое захочу? Пока создавал правила всегда относился к этим селекторам как вынужденному злу, т.к. смысла в них не вижу.
При прочтении моего бреда надо иметь ввиду пункт первый - я не программист.