-
Существует два способа организации правил, которые вы можете использовать для их удобного и аккуратного хранения. Каждое правило может полностью функционировать самостоятельно, однако есть случаи, когда у вас могут быть два или более правила, которые работают совместно для выполнения одной задачи. В таких случаях хорошей практикой будет организовать их вместе, для более удобного обновления, импорта, экспорта, включения, отключения и/или отладки.
Группы правил
Правила в группе правил всегда используют одно и то же событие. Когда правила, вызываемые разными событиями, должны быть организованы вместе, необходимо использовать "набор" правил. Любое правило можно легко превратить в группу правил, нажав кнопку со значком "плюс" (которая добавит "подправило").
Когда вы добавляете новое "подправило" в существующее правило, эти правила становятся "группой правил". Подправила родительского правила будут срабатывать только в том случае, если выполнены условия родительского правила. Это делает возможным под-правилам наследовать любые условия родителя, поскольку, если условия родителя не выполняются, не сработают и дочерние правила. Конечно в под-правилах могут создаваться свои условия.
Каждый раз, когда два правила используют одно и то же событие и одно или несколько условий, их можно объединить в группу правил. Когда вы создаете группу правил, важно, чтобы правило родителя содержало только те условия, которые являются общими для всех под-правил. Преимущество организации правил в группы заключается в том, что, когда вам нужно настроить условие, которое является общим для всей группы, вам нужно сделать это в одном месте (родительское правило) вместо того, чтобы настраивать одно и тоже условие для каждого подправила.
Набор правил
Наборы правил позволяют организовывать правила, которые работают вместе в рамках одной цели или задачи. Правило работает одинаково как внутри набора, так и вне набора, однако размещение правил в наборе правил позволяет легко включать, отключать, экспортировать, удалять или отлаживать все правила в этом наборе единоразово. Другими словами, наборы правил похожи на папки для хранения ваших правил.
В качестве примера у вас может быть ряд правил, установленных на вашем сайте, которые призваны стимулировать учавствовать пользователей в жизни вашего сообщества, создавая "поздравительные" уведомления, когда пользователь достигает определённого этапа развития (например набирает 200 сообщений), а затем отправляют e-mail сообщение, если пользователь не реагирует. Эти правила могут быть объединены в набор правил, под названием "Правила стимулирования пользователей" для удобства.
-
Пользовательские действия - это хлеб и масло правил. Когда вы создаете пользовательское действие в правилах, выполняются две вещи.
Пользовательские действия могут запускаться или планироваться как любое другое действие из вкладки "Действия" у существующих правил.
Могут быть созданы новые правила, которые используют пользовательское действие как событие, через которое они запускаются.
Поэтому пользовательские действия позволяют строить полностью новые "процедуры обработки" правил, которые могут быть вызваны как одно действие. Фактически, вы решаете КОГДА пользовательское действие должно быть выполнено с использование правила, а затем вы также можете выбрать ЧТО ПРОИСХОДИТ, когда пользовательское действие выполнено с помощью других правил.
Создание нового пользовательского действия
Для создания пользовательского действия, посетите раздел настроек Правил "Действия" в вашем админцентре Система -> Правила. Нажмите кнопку Создать. Далее вам предстоит указать название вашего нового действия и его описание (необязательно). Эти данные в дальнейшем вы сможете изменить.
Как только действие будет создано, оно станет доступно для использования во вкладке "Действия" у существующих правил, а также доступно как событие при создании новых правил. Тем не менее, вы, как правило, хотите создать аргумент события или два, которые позволят вам передавать данные переменной в свое пользовательское действие. Для этого кликните по иконки "плюс" рядом с созданным нами действием.
Название аргумента: это название аргумента, которое будет использоваться в формах конфигурации правил.
Описание: краткое описание предоставляемых данных.
Тип аргумента: тип данных, которые должны быть предоставлены для аргумента.
Тип значения: если вы выбрали "объект" или "массив" в качестве типа аргумента, вы можете выбрать тип объекта (ов), который должен быть предоставлен.
Обязательно: укажите, будет ли ваше действие требовать эти данные.
Использование пользовательского действия
После того, как вы настроили пользовательское действие и какие-либо аргументы, которые ему понадобятся, вы можете начать создавать правила, которые будут определять, что происходит, когда действие будет предпринято. Когда вы создадите новое правило, в вашем списке событий будет доступно новое событие; это то, что вы будете использовать для программирования функций для вашего пользовательского действия. Вы можете создать столько правил, групп правил и/или наборов правил, сколько необходимо для выполнения цели вашего пользовательского действия.
Для вызова своего действия, просто добавьте его на вкладку "Действия" любого существующего правила, для которого оно должно быть применено.
-
Правила позволяют прикрепить свои собственные поля данных к любому контенту, контейнерам контента или пользователям в системе. Поля пользовательских данных могут быть настроены только для внутреннего использования или настроены для редактирования пользователями с помощью форм ввода.
Дополнительным преимуществом использования полей пользовательских данных является то, что они позволяют вам создавать дополнительные правила, которые запускаются, когда ваши поля пользовательских данных обновляются (либо через правила, через форму ввода, либо через собственный код).
Разрешения
Поля данных также имеют связь с разрешениями групп пользователей, что позволяет вам ограничить тех, кто сможет просматривать и редактировать данные. В дополнение к разрешениям, вы так же можете ограничить поля пользовательских данных для конкретных контейнеров контента (форумы, категории, и т.д.).
Режимы доступа
Поля данных могут быть настроены в трех разных режимах доступа:
Внутреннее использование
Когда поле данных настроено для внутреннего использования, оно не будет представлено для редактирования в любой форме, независимо от разрешения на редактирование данных в поле. Оно может обновляться только с помощью правил или настраиваемого PHP-кода, но по-прежнему полностью доступено для условий правил.
Публичное использование
Когда поле данных настроено для публичного использования, оно будет представлено в форме редактирования для каждого пользователя, у которого есть разрешение на редактирование поля данных и элемента контента, которому оно принадлежит.
Административное использование
Когда поле данных настроено для публичного использования, оно будет представлено пользователям, у которых есть соответствующее разрешение редактирования поля, а также имеют разрешения модератора редактировать объект, к которому он вложен.
Методы доступа к данным
Правила предоставляют несколько способов доступа к пользовательским данным, связанным с объектами. Существует три метода API для получения и сохранения данных правил, а также два сокращенных способа доступа к данным правил через свойства объекта.
Методы API (для php):
Метод getRulesData() может использоваться для извлечения данных, которые были сохранены в объекте. Этот метод будет извлекать данные независимо от разрешений зарегистрированного пользователя.
$data = $object->getRulesData( 'data_key' );
Метод getRulesDataWithPermission() может использоваться для извлечения данных, сохраненных в объекте, учитывая разрешения. Если у зарегистрированного пользователя нет разрешения на просмотр данных, данные не будут возвращены этим методом.
$data = $object->getRulesDataWithPermission( 'data_key' );
Метод setRulesData() может использоваться для обновления данных, связанных с объектом.
Примечание. Данные должны быть одного и того же типа данных, которые были определены при настройке поля пользовательских данных, иначе будет брошено исключение \InvalidArgumentException.
$object->setRulesData( 'data_key', $data );
Сокращенные методы (для php или тегов шаблонов)
Сокращенные методы доступа к данным правил очень полезны по нескольким причинам. Во-первых, они короче. Но что более важно, их можно безопасно использовать для проверки данных правил, даже если правила не установлены на сайте или были отключены. Это означает, что при использовании метода сокращенного доступа к данным в тегах шаблонов или в php-коде ошибки не будут появляться, если приложение правил отключено.
Ключ данных (с разрешениями)
Доступ к данным правил можно получить для объекта, просто используя data_key для данных как свойство объекта. Этот метод доступа к данным правил также будет учитывать разрешения, установленные для данных, поэтому, если у зарегистрированного пользователя нет разрешения просматривать данные, тогда свойство будет пустым.
/* php-код */
$data = $object->data_key;
<!-- теги шаблона -->
{{if $object->data_key}}
<strong>Data:</strong> {$object->data_key}
{{endif}}
Ключ данных (без разрешений)
Доступ к данным возможен для объекта без проверки разрешений путем префикса data_key с «r_». Поэтому любые пользовательские данные, сохраненные в объекте, будут доступны независимо от разрешений зарегистрированного пользователя.
/* php-код */
$data = $object->r_data_key;
<!-- теги шаблона -->
{{if $object->r_data_key}}
<strong>Data:</strong> {$object->r_data_key}
{{endif}}
-
Мощным компонентом приложения правил является его способность планировать и выполнять действия в будущем. Когда действия запланированы, они будут отображены в области Плановые действия в меню в админцентре. Любое количество действий может быть запланировано в любой момент времени, и они будут находиться в очереди до тех пор, пока не будет достигнуто их запланированное время выполнения.
В любой момент после планирования, действия можно выполнять вручную раньше своего времени, или может быть вручную изменена их запланированная дата. В случае вручную запланированных пользовательских действий, аргументы действий и детали планирования также могут быть изменены в любое время.
Действия, запланированные с помощью правил
Когда действия добавляются на вкладку правила "Действия", у вас есть возможность либо выполнить это действие в режиме реального времени, либо запланировать для выполнения в будущей дате/времени. Любые действия можно планировать на будущее (включая пользовательские действия) при добавлении их в правило.
Ключевые фразы расписания
Иногда желательно иметь только один экземпляр типа действия в очереди на выполнение. Например, когда пользователь входит в систему, вы можете захотеть запланировать отправить ему e-mail сообщение через несколько месяцев после его неактивности, тем самым призвать вернуться в сообщество. В таком случае вы вряд ли хотел бы отправить пользователю все запланированные письма, но только последний экземпляр e-mail сообщения, который запланирован.
Для этого необходимо использовать ключевую фразу планирования. Ключевая фраза планирования похожа на уникальный идентификатор запланированного действия, который гарантирует, что только один экземпляр этого действия может присутствовать в очереди в любой момент времени. Если другое действие запланировано с использованием той же ключевой фразы, оно перезапишет существующее запланированное действие.
И поскольку обычно необходимо иметь один экземпляр запланированного действия в очереди для нескольких объектов в системе (например пользователей), токены могут быть использованы в ключевой фразе для её изменения сущностью. Например, ключевая фраза "Отправить e-mail сообщение для пользователя:[member:id]" использует токен [member:id], который будет заменён на ID пользователя (если предположить, что токен доступен в списке токенов для события). Это гарантирует, что каждый член может одновременно иметь свой отдельный экземпляр действия, запланированного в очереди, но только один для каждого пользователя. Любое количество токенов может использоваться в ключевой фразе, чтобы сделать ее уникальной для своего приложения.
Действия, запланированные вручную
Вы можете вручную запланировать выполнение пользовательского действия в заранее настроенную дату и время. Пользовательские действия могут быть запланированы вручную, чтобы происходить на регулярной основе или в качестве одноразового события. Чтобы запланировать пользовательское действие вручную, нажмите стрелку раскрывающегося списка для пользовательского действия в меню "Пользовательские действия" и выберите вариант "Запланировать вручную".
Повторяющиеся запланированные действия
Когда вы вручную планируете действие, которое будет происходить на постоянной основе, указанный период времени будет автоматически сброшен, и действие будет снова запланировано каждый раз, когда пользовательское действие завершит его выполнение.
На странице ручного планирования выберите "повторно" в качестве параметра частоты действий, а затем укажите период времени между которым должно выполняться действие.
Массовая обработка
Каждый аргумент, используемый вашим пользовательским действием, может быть настроен вручную для обработки. Вы можете опционально выбрать "аргумент массовой обработки" в настройках массовой обработки для запуска действия повторно для каждой из записей в системе, связанной с аргументом массовой обработки. Например, если один из аргументов ваших пользовательских действий был настроен для принятия объекта пользователя, то выбор этого аргумента в качестве параметра массовой обработки приведет к выполнению пользовательского действия для каждого пользователя системы при каждом запуске.
Примечание: Когда вы выбираете аргумент массовой обработки, вы можете установить ограничение количества записей в системе, которые будут обрабатываться при каждом запуске крона, пока цикл обработки не будет завершен.
-
Отслеживайте изменения в контенте, обновления пользователей, событий, действий, заметок или что-то еще, что вы хотите сохранить в истории.
Пользовательские журналы правил могут быть созданы в меню настроек правил. Нажмите на пункт меню Система > Правила > Журналы. Когда вы создаете журнал, вы выбираете тип системного объекта, с которым будет связан журнал (пользователь, контент, узел). Затем вы можете добавить записи в журнал с помощью действий правил.
Любой пользовательский журнал, который вы создадите, будет иметь как минимум два встроенных поля:
Время/дата записи журнала.
Сообщение, связанное с записью журнала.
Поля пользовательских журналов
В дополнение к обязательным полям даты/времени и сообщения, вы можете добавить свои собственные поля дополнительных данных в ваши журналы, которые будут использованы для хранения дополнительных данных или ссылок. Добавление "записываемого аргумента" в ваш пользовательский журнал очень похоже на создание аргумента для пользовательского действия. Вы выберете тип данных, который будет храниться в данных журнала, и он станет точкой конфигурации при добавлении новой записи журнала через правила.
Отображение пользовательского журнала
В правилах есть некоторая базовая встроенная поддержка для отображения пользовательских журналов для пользователей. Например, журналы, связанные с элементами контент будут отображены на странице этого контента в сообществе, тогда как журналы, связанные с контейнерами контента, будут отображаться в форме конфигурации контейнера в админцентре. Пользовательские журналы, связанные с пользователями, будут отображаться как в форме редактирования пользователя в админцентре, так и во вкладке профиля в его профиле в сообществе (для тех, у кого есть разрешение).
Существует несколько вариантов конфигурации, которые относятся к тому, как будут отображаться журналы:
Колонка/направление сортировки по умолчанию
Указывает, какие столбцы журнала будут использоваться для сортировки записей по умолчанию.
Отображать пустой журнал
Если отключено, журналы без записей не будут отображаться, пока не будут содержать в себе хотя бы одну запись.
Журналов на страницу
Изменяет количество записей, которые будут отображены на каждой странице журнала.
Показывать время журнала
Этот параметр позволяет удалить поле времени/даты из таблицы записей журналов, при его отображении. Этот параметр может быть полезен, если вы создали собственное поле даты/времени для журнала или если дата/время не относится к вашему приложению пользовательского журнала.
Название времени журнала/сообщения
Вы можете настроить язык, используемый для описания столбцов времени журнала и сообщений при отображении журнала.
Другие настройки пользовательского журнала
Максимальный размер журнала
Когда вы устанавливаете максимальный размер журнала, журнал будет ограничен установленным количеством записей. Когда этот предел будет достигнут, новые записи журнала приведут к тому, что самые старые записи будут удаляться.
Максимум журналов
Этот параметр применяется к отдельным записям, с которыми связаны журналы. Поэтому, если вы создадите собственный журнал, связанный с темами, и вы установите значение "Максимум журналов" равным 5, то каждая тема будет содержать не более 5 записей журнала. Новые записи журнала приведут к удалению самых старых записей.
Максимальный возраст журнала
Этот параметр применяется к возрасту записей журнала. Записи старше указанного значения будут автоматически очищаться.
Просмотр и управление записями журналов
Все записи журнала для пользовательских журналов, которые вы создали, можно просмотреть из настройках правил в админцентре в разделе "Журналы". Вы можете просматривать записи, удалять записи, а также обрезать или удалять их полностью.
-
В этом примере мы создадим систему, которая будет перемещать "неактивных" пользователей в другую группу, если они не участвовали в жизни сообщества в течение определенного периода времени.
Ингредиенты:
1 пользовательское действие.
1 правило.
Шаг #1 - создание собственного действия в правилах
Назовём его "Деактивация неактивных пользователей". После создания этого действия, добавьте аргумент действия, который примет пользователя. Название аргумента - Пользователь, описание - Пользователь для деактивации, тип аргумента - Object, тип значения - Any Member ( \IPS\Member ), Обязательно - да.
Шаг #2 - создание правила
Используйте пользовательское действие "Деактивация неактивных пользователей" в качестве события, инициирующего срабатывание правила. Назовите правило "Деактивация пользователей, если неактивны".
После того, как вы создали правило, вам нужно будет добавить условие к правилу, которое проверяет, действительно ли пользователь соответствует критериям "неактивный".
Один из способов сделать это - добавить условие с проверкой "Значения атрибута пользователя". Назовите условие "Последняя активность пользователя за период времени". Сохраните, после чего перед вами появятся параметры, из которых необходимо выбрать "Последняя активность", далее выберите параметр "Within the last" и установите период времени, например 3 месяца. В настройках "Пользователи для проверки" должен быть установлен аргумент из пользовательского действия "Деактивация неактивных пользователей". Поскольку это условие будет проверять, БЫЛ ли пользователь активен в течение периода времени, обязательно установите параметр «НЕТ» для условия, то есть будет верно, только если он не был активен. Сохраните условие. Вы можете добавить другие условия по своему усмотрению.
Добавьте действие к этому правилу, которое будет выполнено при соблюдении условий правила. Выберите действие "Изменить основную группу пользователя". Назовите его "Перемещение пользователя в новую группу". Выберите новую группу, в которого переместить пользователя и укажите аргумент события "Деактивация пользователя".
Шаг #3 - Запланируйте пользовательское действие на регулярной основе.
Перейдите в раздел "Действия" в админцентре в правилах. Нажмите на выпадающее меню рядом с "Деактивация неактивных пользователей" и выберите "Запланировать вручную". Выберите "Повторно" в опции "Частота действия". Выберите подходящий период времени между запусками, например 7 дней. Поскольку вы хотите, чтобы это действие применялось ко всем пользователям сообщества, выберите "Пользователь" в качестве опции Массовый процесс. Сохраните форму.
Процесс настройки завершён!
deactivate-members-who-have-been-inactive.xml
-
В данном примере мы добавим поле дополнительных данных в форумы, которое будет использоваться для того, чтобы срок тем, опубликованных на форуме, автоматически истекал через определенное количество часов. Пользовательское действие используется для планирования закрытия темы в заданное время. Этот пример можно запросто изменить, добавить свои условия или продлить срок запланированного закрытия, если автор ответит в теме.
Правило #1 - Вызов запланированного пользовательского действия
Условие: Global > Истинное значение (Название: Только новая тема).
Событие: Тема была создана или обновлена.
Действие: Запланировать автоматического закрытие темы (Название: Вызов запланированного действия).
Правило #2 - Истечение срока действия темы на основе настроек
Событие: Вызываемое действие: Запланировать автоматическое закрытие темы.
Условие: Цифровое значение (Настройка истечения срока темы больше нуля).
Действие: Закрыть контент (Закрыть темы в назначенное время).
срок-действия-тема.xml
-
Правило: Автоматическое тегирование созданной темы
Событие: Тема была создана или обновлена
Условия: ( соответствие всем условиям )
Тема в определённом форуме (Тема в ___ forum)
Истинное значение (Тема является новой)
Действие:
Изменить теги контента (Добавить теги (и) в тему)
автоматическое-тегирование-созданной-темы.xml
-
Правило: Создать тему обсуждения при создании объявления
Событие: Контент создан/обновлён
Условия: ( все условия должны выполниться )
Сравнить объекты (Контент - это объявление)
Истинное значение (Объявление новое)
Действие: Создать тему (Создать тему для обсуждения объявления)
создать-тему-обсуждения-при-создании-объявления.xml
-
Правило: Разбан пользователей, с которых снята отметка спамера
Событие: Пользователь, с которого снята отметка спамера
Условия: нет
Действие: Разбанить пользователя (Разбан пользователя)
разбан-пользователей-с-которых-снята-отметка-спамера.xml
-
Правило: Награждение пользователя за X количества контента
Событие: Обновление контента
Условия: ( соответствие всем условиям )
Новый контент (событие наступает при создании нового контента)
Пользователь достиг порогового значения в XX контента
Действие:
Наградить пользователя
issue-award-based-on-content-count.xml
-
Правило: Награждение пользователя за X баллов репутации
Событие: Обновление контента
Условия: ( соответствие всем условиям )
- Новый контент (событие наступает при создании нового контента)
- Репутация пользователя превышает указанное значение
- Пользователь ещё не имеет такой награды
Действие:
Наградить пользователя
nagrada-za-100-ballov-reputatsii.xml
-
Правило: Награждение автора за количество просмотров его темы
Событие: Тема просматривается
Условия: ( соответствие всем условиям )
- Тема находится в определённом форуме (Topic is in certain forums)
- Тема набрала 10 000 просмотров (Content attribute values - Number of Views)
- Пользователь ещё не имеет такой награды
Действие:
Наградить пользователя
50-000-prosmotrov-lichnogo-bloga.xml
-
Правило: Награждение пользователя за X дней после регистрации
Событие: Пользователь вошел в систему
Условия: ( соответствие всем условиям )
- Пользователь ожидает награды 2 года (Compare Dates / Date 1 and Date 2 are within a certain amount of time of each other / Joined Date мы Global: Current time)
Действие:
Наградить пользователя