Настройка темы интерфейса
Темы
Основной источник данных: uiserv/theme
Тема интерфейса - набор ссылок на изображения и стили для визуальной кастомизации Citeck.
Просмотр существующих тем, их редактирование, применение, загрузка новых осуществляется в журнале Темы (Рабочее пространство «Раздел администратора» - Конфигурация UI).
Журнал доступен по адресу: v2/admin?journalId=ecos-theme&type=JOURNAL
Доступные операции с темами: загрузка новой темы (1), скачивание (2), удаление существующей (3), применение темы (4).
Действие Применить тему доступно для неактивных тем, для текущей темы действие не отображается.
Через интерфейс на данный момент не предусмотрена настройка темы - только через скачивание, изменение и загрузку обратно. При загрузке темы через интерфейс zip-архив загружается в uiserv.
Структура архива:
root:
theme:
image:
apple-touch-icon.png
apple-touch-icon-precomposed.png
favicon.ico
login-logo.png
logo.png
menu-left-logo-large.png
menu-left-logo-small.png
meta.json
main.css
где:
root - корень архива
theme - идентификатор темы
image - произвольная папка для изображений. Связь между реальным файлом и его идентификатором осуществляется в meta.json
meta.json - метаданные темы
main.css - главный файл со стилями
Общий вид meta.json:
{
"name": {
"ru": "Тема ECOS",
"en": "ECOS theme"
},
"parentRef": null,
"images": {
"favicon": "/image/favicon.ico",
"logo": "/image/logo.svg",
"login-logo": "/image/login-logo.svg",
"menu-left-logo-large": "/image/menu-left-logo-large.svg",
"menu-left-logo-small": "/image/menu-left-logo-small.svg",
"apple-touch-icon": "/image/apple-touch-icon.png",
"apple-touch-icon-precomposed": "/image/apple-touch-icon-precomposed.png"
}
}
name - имя темы. Справочная информация;
images - ссылки на изображения:
favicon - значок для сайта. Поддерживается только ICO формат
logo - логотип темы. Будет использоваться при выборе темы
login-logo - логотип на странице логина
menu-left-logo-large - логотип в левом развернутом меню
menu-left-logo-small - логотип в левом свернутом меню
apple-touch-icon - логотип, используемый iOS для закладок и сайтов «на домашнем экране»
apple-touch-icon-precomposed - логотип, используемый в ранних версиях iOS для закладок и сайтов «на домашнем экране»
Поддерживаемые форматы логотипов: jpeg, ico, png (в предстоящем релизе добавлен svg). Размер логотипа не лимитирован.
Кроме логотипов можно менять стили в файле main.css. Через этот файл можно изменить практически любую часть UI, но в общем случае предполагается, что автор изменений хорошо знает как работать со стилями в браузере.
На данный момент сервер никак не обрабатывает стили. Т.е. в архиве желательно грузить сразу минифицированные стили.
Помимо main.css могут быть и другие стили и к ним можно получить доступ по API. В будущем если файл main.css будет отсутствовать, то сервер сгенерирует его из всех css файлов в теме.
Конфигурация active-theme
Для хранения текущей темы используется конфигурация в uiserv active-theme
Для получения текущей темы:
await Records.get('uiserv/config@active-theme').load('value');
Информация об активной теме доступна в журнале Конфигурация ECOS (v2/admin?journalId=ecos-configs&type=JOURNAL) в active-theme:
Для изменения темы укажите ее новое значение в настройке и сохраните:
API
Получение основного файла стилей для темы:
/gateway/uiserv/api/theme/{themeId}/style/main.css
Расширение .css можно не указывать. Вместо main.css могут быть и другие стили, которые есть в теме (учитывается только имя файла без пути до него). Получение изображений:
/gateway/uiserv/api/theme/{themeId}/image/logo
Вместо logo должен быть идентификатор изображения из meta.json темы (images) Вместо {themeId} могут быть:
Реальный идентификатор темы
Константа “active“, с которой идентификатор темы загружается из конфига active-theme
Кэш
Все запросы за стилями и изображениями возвращают заголовки кэширования с временем жизни ~4 часа.
Чтобы избежать проблем с кэшем (темы могут меняться «на лету») нужно добавлять в запросы ключ кэширования, который загружается по следующему API:
await Records.get('uiserv/meta@').load('attributes.theme-cache-key');