CMS.Vars: настройка пользовательских переменных
Модуль CMS.Vars позволяет создавать пользовательские настройки и делать их доступными для редактирования из административной части сайта. Что позволяет существенно расширить функциональные возможности в управлении контентом.
Основные особенности модуля:
- По умолчанию настройки хранятся в файловой системе. Однако есть специальное API, позволяющее при необходимости реализовать любой механизм хранения: в MySQL, в др. системах.
- Специально подключать админку настроек не требуется, она загружается автоматически при загрузке главного модуля.
- Есть только один уровень разделов, а в нем настройки. Вложенность разделов не поддерживается.
- Можно создавать настройки для компонентов, но раздел для него необходимо создавать в общем списке.
- Широкие возможности для создания собственных типов настроек.
- Настройки реализованы через механизм CMS.Fields, поэтому для них доступны возможности, реализованные для типов CMS.Fields.
- Гибкое управление правами доступа к настройкам - возможность создавать группы пользователей.
Вывод настроек в администраторе
В администраторе реализован интерфейс управления настройками разных типов в виде отдельной вкладки.
Информация делится на разделы. По умолчанию создано два раздела: "Основные настройки" и "Настройки системы администрирования" . В каждом из них можно создать новую переменную, нажав на иконку с плюсиком в правом углу заголовка раздела.
Рекомендуется для каждой группы настроек, объединенных общим смыслом или относящихся к какому-либо компоненту, создавать отдельный раздел. Добавить раздел можно, нажав на соответствующую кнопку в правой верхней части страницы.
Вывод настроек в шаблоне
Для вывода настройки в шаблоне необходимо воспользоваться методом get('var').
// где-то в шаблоне <?= CMS::vars()->get('myvar') ?>
Типы настроек
В модуле реализованы стандартные типы настроек:
- String - строка (input).
- Textarea - текстовое поле.
- HTML - текстовое поле с виз. редактором.
- WIKI - текстовое поле с использованием wiki-разметки.
- Content - контентная область.
- Array - массив.
- File - файл.
- Image - изображение.
- Gallery - галерея.
- YesNo - селектор выбора да/нет.
Если данный список не удовлетворяет потребностям, можно создать свой тип настроек, унаследовав его от базового абстрактного класса CMS.Var или от одного из классов базовых настроек.
Класс содержит различные методы, которые можно переопределить. Часто используемые из них:
- type_title() - заголовок переменной, введенный пользователем при создании переменной в админке.
- fields() - асс. массив для описания полей.
- get() - получить переменную.
- preview() - выводит значение переменной c html-тегами
- render() - отображает шаблон.
- title() - заголовок переменной.
События
Событие может быть вызвано непосредственно перед сохранением отдельной настройки CMS.Vars. Возможно обработать данные прежде чем они будут сохранены, сбросить кеш, сгенерировать еще что-то и т.п.
Для обработки данных конкретной настройки необходимо повесить обработчик на событие вида:
- cms.vars.change
- cms.vars.change.{$var_name}
где $var_name - мнемокод настройки.
Хранение списка опций в настройках
В контроллере табличного администрирования поля некоторых типов, например, select и multilink или элементы формы фильтров представляют собой некие списки опций для выбора. В CMS.Vars реализована возможность хранить такие списки в настройках.
Для этого необходимо создать в "Настройках" переменную типа "массив" и задать там все варианты. В этом случае параметр items будет строкой вида var:имя переменной
'items' => 'var:dict.var'