Избранное меню (favorites_menu)¶
См. также: data-api.md · korfix-catalogs.md · systempush-settings.md ← Home
Каталог favorites_menu — персональные настройки навигации пользователя:
избранные пункты бокового меню, стартовая страница, режим отображения.
Структура записи¶
Одна запись на пользователя (alias = ID пользователя).
| Поле | Тип | Описание |
|---|---|---|
alias |
hidden | ID пользователя (= from_auth) |
name |
hidden | Имя пользователя |
from_auth |
hidden | Владелец записи |
from_group |
hidden | Группа владельца |
first_page |
select_from_table | Стартовая страница (из дерева меню rutree) |
menu |
multiselect_from_table | ID пунктов меню, добавленных в избранное |
hide_menu |
checkbox | Свернуть остальные пункты меню (показывать только избранное) |
Доступ: self — каждый пользователь видит и редактирует только свою запись.
Чтение избранного¶
// Получить настройки текущего пользователя
const resp = await App.fetch('/db/favorites_menu.json');
const favorites = resp.data[0]; // одна запись на пользователя
console.log(favorites.menu); // "12,45,78" — ID пунктов меню через запятую
console.log(favorites.first_page); // ID стартовой страницы
console.log(favorites.hide_menu); // "1" или "0"
Добавление пункта в избранное¶
Чтобы добавить пункт в избранное пользователя, нужно:
- Прочитать текущий список
menu - Добавить нужный ID
- Сохранить обратно
async function addToFavorites(menuItemId) {
// 1. Читаем текущие настройки
const resp = await App.fetch('/db/favorites_menu.json');
const record = resp.data[0];
if (!record) {
console.error('Нет записи favorites_menu для пользователя');
return;
}
// 2. Проверяем, не добавлен ли уже
const currentIds = (record.menu || '').split(',').filter(Boolean);
if (currentIds.includes(String(menuItemId))) {
return; // уже в избранном
}
// 3. Добавляем и сохраняем
currentIds.push(String(menuItemId));
await App.fetch(`/db/favorites_menu/${record.alias}?edit&ajax=1`, {
method: 'POST',
body: {
'form[menu]': currentIds, // массив ID
submit: 1
}
});
}
Удаление из избранного¶
async function removeFromFavorites(menuItemId) {
const resp = await App.fetch('/db/favorites_menu.json');
const record = resp.data[0];
if (!record) return;
const currentIds = (record.menu || '').split(',').filter(Boolean);
const newIds = currentIds.filter(id => id !== String(menuItemId));
await App.fetch(`/db/favorites_menu/${record.alias}?edit&ajax=1`, {
method: 'POST',
body: {
'form[menu]': newIds,
submit: 1
}
});
}
Получение дерева меню¶
Чтобы узнать какие пункты меню доступны для добавления в избранное:
// Загрузить схему — в ней arr содержит полное дерево меню
const schema = await App.fetch('/db/favorites_menu/sheme.json');
const menuTree = schema.data.menu.arr;
// { "12": "Финансы > Операции", "45": "Задачи > Все задачи", ... }
Установка стартовой страницы¶
async function setStartPage(pageId) {
const resp = await App.fetch('/db/favorites_menu.json');
const record = resp.data[0];
if (!record) return;
await App.fetch(`/db/favorites_menu/${record.alias}?edit&ajax=1`, {
method: 'POST',
body: {
'form[first_page]': pageId,
submit: 1
}
});
}
Сценарии использования в миниапах¶
Автодобавление в избранное при установке¶
При установке приложения можно автоматически добавить нужные пункты меню в избранное, чтобы пользователь сразу видел их в навигации.
Умное избранное на основе активности¶
Приложение может анализировать activity и автоматически предлагать
добавить в избранное часто посещаемые разделы:
// Получить последние визиты пользователя
const activity = await App.fetchAll('/db/activity.json?form[action]=просмотрел&limit=100');
// Подсчитать частоту посещения каталогов
const counts = {};
activity.data.forEach(item => {
counts[item.catalog] = (counts[item.catalog] || 0) + 1;
});
// Топ-5 самых посещаемых
const top5 = Object.entries(counts)
.sort((a, b) => b[1] - a[1])
.slice(0, 5);
Персонализация навигации по роли¶
Приложение может настраивать избранное в зависимости от роли пользователя, отдела или активных модулей компании.
Важно¶
- Запись создаётся автоматически при первом входе пользователя (дефолт зависит от
type_user) - Поле
menu— строка с ID через запятую (multiselect_from_table) - При записи через API можно передать
form[menu]как массив — платформа сконвертирует - Изменения в избранном видны после перезагрузки страницы (боковое меню рендерится серверно)
- Drag-and-drop пунктов меню в избранное работает в UI — приложение получит уже обновлённые данные при чтении
Каталог: /db/favorites_menu | Схема: favorites_menu.sheme.inc.php
← Home