Принципы
Почти все параметры ЛК, отвечающие за конкретную функциональность настраиваются, через отдельные программные сущности — виджеты. Основная особенность виджета — он может быть настроен индивидуально под каждого клиента. Для каждого виджета в ЛК существует программная обвязка. Так, каждому типу виджета соответствует класс на ruby, а каждому объекту виджета — объект класса. В данный момент все настройки виджеты получают из YML-файлов. Формат настроек в файле индивидуален для каждого типа виджета, но существует общая часть.
Конфигурационные файлы
В качестве конфигурационных файлов для виджетов используются все YML-файлы в директориях $latera_default/widgets, $latera_client/widgets, $server_client/widgets (файлы объединяются именно в таком порядке). Каждый файл после считывания преобразуется в ruby-объекты класса Hash, которые затем рекурсивно объединяются.
Например, виджет ссылок на главной странице может быть сконфигурирован следующим образом. В файле $latera_default/widgets/navigation_links.yml содержатся настройки инсталляции по умолчанию.
navigation_links: index: personal_data: position: 1 icon: profile links: [passwords, notifications_subscription]
Ключ «navigation_links» обозначает тип виджета. Он совпадает с названием файла, хотя в общем случае этого не требуется (но настоятельно рекомендуется). Вложенный ключ «index» обозначает конкретный объект виджета. В данном случае объект index используется на главной странице ЛК (это предопределенное поведение). К нему может быть добавлен файл $latera_client/widgets/navigation_links.yml со следующим содержимым:
navigation_links: index: actions: position: 1 links: [friends] personal_data: position: 2
При загрузке веб-сервера приложение объединит два файла в следующую структуру (она никуда не записывается, а хранится в памяти и используется приложением):
navigation_links: index: actions: position: 1 links: [friends] personal_data: position: 2 icon: profile links: [passwords, notifications_subscription]
Объекту виджета будет доступна следующая информация:
actions: position: 1 links: [friends] personal_data: position: 2 icon: profile links: [passwords, notifications_subscription]