продолжение + код
Продолжение, начало тут
Архив с модулем тут
Правило представляет собой такую конструкцию:
ПРАВИЛО -> ЕСЛИ { УСЛОВИЯ ИСТИННЫ} ТО {ВЫПОЛНИМ ДЕЙСТВИЕ}
Редактирование Правила:
Называем наше правило. Название правила можно использовать потом в Действиях, в служебной переменной $myrule_name
Активность - тут всё ясно - играем/не играем
Поле Если - тут вводим логическое выражение из наших Условий. Начинаем набирать имя Условия, появляется выпадающий список из имеющегося набора.
Допускаются скобки и логические связки И/ИЛИ/! в различных сочетаниях.
Ещё из фишек - в Условиях работают конструкции %Объект.Свойство%, на момент проверки Условия подставляется значение.
Интересно еще использовать в качестве сравнения операнд php-код (по МДМ-шному - Advanced condition)
Пример - анализ строки состояния дома
1 это свойство, содержит инфу о доме типа Дома:Сергей, Ольга. Активность: Кухня, Прихожая
2 операнд - php-код
3 сам код, анализирующий значение привязанного свойства $value и возвращающий результат в $res - строго 1 или 0 (ответственность заполнения кода - на пользователе!) $res - обязательно к использованию. Эта переменная анализируется внутри для вынесения утверждения, что Условие выполнилось.
В примере просто проверяется присутствие пользователей (хотя бы одного из них) в доме, при обнаружении - Условие срабатывает.
Да, Правило не вычисляется, если привязанное свойство обновилось, но не изменило своего значения. Кроме выбора операнда значение обновилось, тут при любом обновлении срабатывает вычисление Правила.
Из интересного, или для чего на вкладке Правил есть птичка?
При сохранении Правила проходит перекодировка логики во внутреннее представление (ну и при нажатии на птичку).
Вот типа такое @CON0005@ && ! @CON0008@ && @CON0003@
, что позволило некоторым образом обезопаситься от изменения названий Условий и перейти к айдишникам Условий и к легкому доступу к их значениям (Условия могут находиться только в двух состояниях - 1/0). Вычисление логики Правила сводится к тупому eval выражения, типа 1 && !0 && 1
Если в окне логики Правила существует несуществующее (хе!) Условие - при нажатии на птичку неверное Условие превратится в '0' (false).
Ещё не проверяется Активность Условий, которые присутствуют в Правиле, но Правило вычисляется из-за сработки другого Условия. Думаю над этим.
Пока работает так - Правило вычисляется при сработке только активного Условия, а значения других Условий берутся без учета активности(.
~~Если все Условия активные, то это не важно. ~~
В версии на гите сделал замену неактивного Условия на 0 (false)
И, эээ, задумывалось использовать в Правилах ветку Иначе, но пока решил не делать.
Сделано для себя, любимого, т.к. стало тяжело ориентироваться в большом количестве алгоритмов, алгоритмиков, условий и сценариев(
И с прицелом на будущее
PS. Модуль при деинсталляции убирает свои таблицы, но пока не отвязывает привязанные свойства! В планах
PPS. Добавлена ссылка на гит
Домодедово, Россия
На форуме: xor