Нет нужных селекторов в rules

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

Аватар пользователя vortex vortex 19 мая 2014 в 19:56

Хочу создать правило
event: Выполняются регулярные задачи CRON
Состояния: тип материала %тип материала% & В материале существует поле даты & поле даты больше определённого значения
Действие: снять закрепленность/удалить со стартовой или иные действия.

Проблема в селекторах данных которые меня не пускают на следующие этапы.
В них предлагается только site: и всё.

Нашёл похожую [#102723]проблему[/#], но решение мне не понятно.

Пытался просто сослаться на наличие поля, что бы дало мне эти селекторы
Получилось следующее:

Сущность имеет поле
Параметр: Материал: [site:current-user], Поле: field_date

В нём тоже нужно выбирать селектор, но единственный доступный [site:current-user] пропустил.
При этом создавая новые условия, новых селекторов не прибавляется.

1. Объясните мне на русском, что такое селекторы и зачем они нужны!
2. Подскажите как решить конкретно мою задачу. [module=auto_expire] не предлагать.

Мой опыт rules пока ограничивается [#109073]этим[/#].

Комментарии

Аватар пользователя MerryHamster MerryHamster 20 мая 2014 в 12:42

Действительно, не получается сделать с этим event.
Попробуйте сделать используя Rules Scheduler и установите нужную частоту срабатывания компоненты.

Аватар пользователя vortex vortex 20 мая 2014 в 16:03

Так. Это возвращает меня к Компонентам. Шедулер работает только с ними.
Придётся всё-таки гуглить эти "компоненты" Smile

Блин. Не понимаю. Покажите пример с русским описанием с этими компонентами.
Аватар пользователя vortex vortex 20 мая 2014 в 18:55

Так. Создал "Конфигурация условия (И)". Добавил своих условий. Пытаюсь добавить эти условия в обычное правило, и снова не хватает селекторов...

Видимо надо было создавать компонент типа "правило". Пойду попробую

Опять не то. Где тот пункт, который можно подсунуть планировщику?!

Хотя бы даёт нужные мне селекторы. но как запускать это правило я не понимаю

{ "rules_test3" : {
    "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" ] } }
    ]
  }
}
Аватар пользователя vortex vortex 21 мая 2014 в 16:49

не то мне кажется. У него стоит "после сохранения материала".

А мне надо периодичность. я уже вышел на шедулер, но он однократный.

Аватар пользователя vortex vortex 21 мая 2014 в 19:38

Так. Второй вариант. на сколько это п...ц?!

{ "rules_event_eol" : {
    "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" ] } }
    ]
  }
}

Потестировал на локальной копии.
В правиле ошибся. надо знак сравнения в обратную сторону повернуть...
Вот лог:

Rules debug information:
" Reacting on event После просмотра материала.

    0 ms Reacting on event После просмотра материала.
    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.
    "

Rule Снятие с главной мероприятия по истечению даты fires. [edit]
        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 После просмотра материала.

Думаю добавить условий на наличие флагов, что бы лишний раз не применялось, но правило будет активироваться каждый раз Sad
Там срабатывает ещё одно правило, но вроде сильно не мешает.

Очень хочется послушать мнения.

Радует только одно. Оно работает.

Аватар пользователя vortex vortex 22 мая 2014 в 12:24

До видео не добрался. Почитал коротко про VBO+rules на русском http://xandeadx.ru/blog/drupal/453
Возможно и оно, но нужен новый модуль... У меня их и так как насрано Sad

Пока вот моё правило на основе моего же вчерашнего.
Добавил пустое текстовое поле в тип материала, которое при выполнении правила заполняется фразой, что событие устарело и темизация как "message ok". В условия добавил проверку на отсутствие наличия этого текста. Так же вываливается сообщение друпала типа "статус", что событие устарело.
Криво конечно...

Аватар пользователя vortex vortex 23 мая 2014 в 13:51

Добавил крон в своё правило. Ругается в журнал, но работает. В итоге событие "node_view--event" является просто подспорьем, что бы прицепить параметр node.
Главное,что бы в очередном обновлении модуля или ядра эту фичу не потёрли.

Аватар пользователя vortex vortex 23 мая 2014 в 15:43

ну, например, то что я не программист Smile

С другой стороны я не понимаю, почему такая очевидная вещь как периодическая сработка правил должна вызывать призыв высших сил, хуков и говна на голову. Вроде бы степень важности и необходимости rules ничуть не ниже чем у views, но второй суперский, понятный (или хотя бы можно понять), а первый выглядит как кусок необработанной руды (хотел написать другой слово).
Видимо, есть некая мораль в том что бы требовать некие селекторы данных, но я её не понимаю. Почему я не могу взять поле какое захочу? Пока создавал правила всегда относился к этим селекторам как вынужденному злу, т.к. смысла в них не вижу.

При прочтении моего бреда надо иметь ввиду пункт первый - я не программист.