Jump to content

Создание и использование полей пользовательских данных

Правила позволяют прикрепить свои собственные поля данных к любому контенту, контейнерам контента или пользователям в системе. Поля пользовательских данных могут быть настроены только для внутреннего использования или настроены для редактирования пользователями с помощью форм ввода.

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

Разрешения

Поля данных также имеют связь с разрешениями групп пользователей, что позволяет вам ограничить тех, кто сможет просматривать и редактировать данные. В дополнение к разрешениям, вы так же можете ограничить поля пользовательских данных для конкретных контейнеров контента (форумы, категории, и т.д.).

Режимы доступа

Поля данных могут быть настроены в трех разных режимах доступа:

Внутреннее использование
Когда поле данных настроено для внутреннего использования, оно не будет представлено для редактирования в любой форме, независимо от разрешения на редактирование данных в поле. Оно может обновляться только с помощью правил или настраиваемого 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}}