Для хранения глобальных для проекта параметров, кратких алиасов отдельных секций и документов, а также управления отображением групп секций (в терминах системы администрирования - ПРОФИЛИ, выглядят как вкладки "Администрирование", "Тематический рубрикатор" и т.д.) используется системная таблица options. Функционал работы с таблицей находится в модуле Contenido::Project, таблицу options переопределять нельзя! Глобальную переменную $project, хранящую экземпляр объекта Contenido::Project – желательно тоже.
В таблице options свернуты все данные из блока "Редактирование параметров сайта" в разделе Администрирование. Это, в первую очередь:
- Алиасы секций для быстрого доступа к их id;
- Алиасы отдельных документов, также для быстрого доступа к их id;
- Словарь произвольных глобальных параметров;
- Список вкладок системы администрирования со списком отображаемых в данной вкладке функциональных блоков и набором классов секций, которые показываются в каждой конкретной вкладке.
Все перечисленные данные наполняются и управляются из системы администрирования; в программном коде они доступны через объект $project. Объект $project объявлен в Contenido::Globals, доступен в виде глобальной переменной в mason-компонентах и в pm-модулях при включении:
use Contenido::Globals;
Для доступа к данным используются методы s_alias, d_alias, params. В качестве мнемоники любая perl-строка.
Алиасы секций
Для доступа к id существующей секции (например, при выборке документов из заранее определенного контейнера) по заранее определенной мнемонике (алиасу) необходимо сначала в разделе "Редактирование параметров сайта" – "Строковые идентификаторы секций" указать в качестве параметра алиас секции и справа выбрать из выпадающего дерева секцию, на которую этот идентификатор будет ссылаться. Нажать кнопку "Сохранить". За один раз можно сохранять до пяти алиасов, после сохранения становятся доступны еще пять свободных полей.
В компоненте или модуле:
$project->s_alias->{<мнемоника>}
выдаст числовой идентификатор или undef, если алиас не описан.
Внимание! В настоящее время существует баг/фича: вызов функции s_alias без описанных алиасов выдает perl-level ошибку.
Алиасы документов
В отличие от секций, дерево документов просто не существует. Поэтому для заведения алиаса документа необходимо прописать в качестве параметра мнемонику, в качестве значения - id документа.
В компоненте или модуле:
$project->s_alias->{<мнемоника>}
выдаст числовой идентификатор или undef, если алиас не описан.
Данный функционал создан для разработки проектов на нескольких, не связанных друг с другом БД. В общем случае одни и те же значимые секции или документы будут иметь различные id. Для унификации доступа к ним и создана система идентификаторов. Конечный код в итоге не привязан к физическим id, выдаваемым базами данных.
Дополнительные параметры
По виду - то же самое, что и идентификаторы документов, концептуальное отличие в том, что и в качестве параметра, и в качестве значения может выступать любая perl-строка. Пример использования:
- Значение mailfrom, подставляемое в скрипты отправки документов для указания адреса робота-отправителя
- Значение mailto, подставляемое в скрипты отправки почты для отправки сообщений обратной связи или диагностических сообщений.
Ну и все, что сочтете нужным.
В компоненте или модуле:
$project->params->{<мнемоника>}
выдаст значение параметра или undef, если параметр не описан.
Внимание! В настоящее время существует баг/фича: вызов функции params без заполнения параметров выдает perl-level ошибку.
Модификация и сохранение параметров проекта
Объект $project инициализируется и заполняется в момент старта проекта или инициализации скрипта. Тем не менее это обычный Contenido-объект, и он может быть переопределен и сохранен в процессе эксплуатации.
Пример: скрипт создает некоторую секцию и автоматически регистрирует ее алиас в соответствии с некоторыми заранее опреленными соглашениями. Поскольку метод $project->s_alias возвращает ссылку на свой внутренний хеш, этот хеш можно видоизменить (или поломать):
$section->alias('my_new_alias');
$section->store;
my $aliases = $project->s_alias;
$aliases->{$section->alias} = $section->id;
$project->store;
Новый алиас секции будет сохранен в таблице options.