Админ-панель MultiStore: Возможности и план улучшений
Админ-панель модуля MultiStore (файл mstore.admin.php, Cotonti Siena 0.9.26, PHP 8.4) предназначена для управления товарами и очередью валидации. Доступна только администраторам с правами в категории 'mstore' ('any'), проверяется через cot_auth и cot_block(Cot::$usr['isadmin']). Интерфейс формируется шаблоном mstore.admin.tpl с использованием XTemplate. Ниже описаны текущие возможности и план их расширения.
Текущие возможности админ-панели
Панель позволяет просматривать, фильтровать, сортировать, валидировать, отменять валидацию и удалять товары, а также выполнять массовые действия.
1. Просмотр списка товаров
- Загрузка данных: Товары загружаются из таблицы
cot_mstoreс JOIN наcot_usersдля получения имени владельца (user_name). - Фильтры по состоянию (параметр
filterиз POST/GET, по умолчанию 'valqueue'):- 'all': Все товары с непустым заголовком (
msitem_title IS NOT NULL AND msitem_title != ''). - 'valqueue': Товары на рассмотрении (
msitem_state = 1, STATE_PENDING). - 'validated': Опубликованные товары (
msitem_state = 0, STATE_PUBLISHED). - 'drafts': Черновики (
msitem_state = 2, STATE_DRAFT).
- 'all': Все товары с непустым заголовком (
- Ограничение по категориям: Показываются товары только из категорий, доступных администратору (через
cot_structure_children('mstore', '')). - Сортировка:
- Поле сортировки (
sorttypeиз POST/GET, по умолчанию 'id'): 'id', 'title', 'desc', 'text', 'ownerid', 'date', 'count', 'updated', 'cat', плюс экстрафилды изcot_mstore_config_order(true). - Направление (
sortway: 'asc' или 'desc', по умолчанию 'desc'). - SQL:
ORDER BY msitem_[sorttype] [sortway].
- Поле сортировки (
- Пагинация: Реализована через
cot_import_pagenav('d', Cot::$cfg['mstore']['mstoremaxlistsperpage']), с тегами пагинации черезcot_generatePaginationTags. - Отображение:
- Цикл по товарам: Каждый товар отображается с тегами через
cot_generate_mstoretags($row, 'ADMIN_MSTORE_', 200)(URL, ID, заголовок, описание, статус, даты, просмотры). - Дополнительные теги: Владелец (
cot_build_user), чередование строк (cot_build_oddeven), счетчик товаров в категории (SUMstructure_countпо path). - Чекбоксы для массовых действий (
s[$id]).
- Цикл по товарам: Каждый товар отображается с тегами через
- Статистика:
- Общее количество товаров в БД:
Cot::$db->countRows($db_mstore). - Товаров на странице: Подсчет в цикле ($ii).
- Товаров на рассмотрении: SQL
COUNT(*) WHERE msitem_state=1, сохраняется в$sys['mstorequeued'].
- Общее количество товаров в БД:
2. Массовые действия над товарами
- Форма: Отправка на URL
admin?m=mstore&a=update_checked&d=[страница]с массивом чекбоксовs[]. - Валидация (
paction='validate'):- Цикл по
$s: Для каждого ID меняетmsitem_stateна STATE_PUBLISHED=0. - Проверка прав:
cot_auth('mstore', $row['msitem_cat'], 'A'). - Логи:
cot_log("Mstore #$id - adm_queue_validated", 'mstore', 'validate', 'done'). - Очистка кэша:
structure, URI товара/категории, индекс (еслиcache_mstoreилиcache_index).
- Цикл по
- Удаление (
paction='delete'):- Цикл по
$s: ВызовMstoreControlService::delete($id)для каждого. - Логи и очистка кэша.
- Цикл по
- Подтверждение: Через
cot_check_xp(). - Сообщения: Список успешных ID (
perelik), ошибки для не найденных (notfoundet). - Редирект: На текущую страницу (
cot_url('admin', $urlParams)).
3. Действия над отдельным товаром
- Валидация (
a=validate&id=[ID]):- SQL: Проверяет текущий
msitem_state, меняет на STATE_PUBLISHED=0, если не published. - Проверка прав:
cot_auth('mstore', $row['msitem_cat'], 'A'). - Лог:
cot_log("Mstore #$id - adm_queue_validated"). - Кэш: Очищает
structure, URI товара/категории, индекс. - Подтверждение:
cot_check_xg().
- SQL: Проверяет текущий
- Отмена валидации (
a=unvalidate&id=[ID]):- Меняет на STATE_PENDING=1, если не pending.
- Те же проверки, лог и кэш.
- Удаление (
a=delete&id=[ID]):- Вызов:
MstoreControlService::delete($id). - Подтверждение:
cot_check_xg(). - Лог и очистка кэша.
- Вызов:
- Редактирование: Ссылка на
mstore?m=edit&id=[ID]. - Просмотр: Ссылка на товар через
cot_mstore_url($row)(параметры: c, id или al). - Редирект: На
backUrl(GET, base64_decode) или текущую страницу.
4. Навигация и интерфейс
- Хлебные крошки: Extensions > MultiStore > Administration (массив
$adminPath). - Ссылки:
- Конфиг модуля:
admin?m=config&n=edit&o=module&p=mstore. - Добавление товара:
mstore?m=add. - Экстрафилды:
admin?m=extrafields&n=cot_mstore. - Структура категорий:
admin?m=structure&n=mstore.
- Конфиг модуля:
- Форма фильтров:
- Сортировка:
cot_selectbox($sorttype, 'sorttype'). - Направление:
cot_selectbox($sortway, 'sortway'). - Фильтр:
cot_selectbox($filter, 'filter').
- Сортировка:
- Сообщения: Успех/ошибки через
cot_display_messages($t)(например, '#ID - adm_queue_validated'). - Заголовок и помощь:
$adminTitle = Cot::$L['mstore_Mstore'],$adminHelp = Cot::$L['adm_help_mstore'].
5. Хуки для расширения
mstore.admin.first: Перед основным кодом.mstore.admin.validate,mstore.admin.validate.done: Для валидации.mstore.admin.unvalidate: Для отмены валидации.mstore.admin.delete,mstore.admin.delete.done: Для удаления.mstore.admin.checked_validate,mstore.admin.checked_delete: Для массовых действий.mstore.admin.loop: В цикле списка товаров.mstore.admin.tags: Для тегов шаблона.
6. Дополнительно
- Логи: Действия логируются через
cot_log(например, 'Mstore #ID - adm_queue_validated'). - Кэш: Очищается после действий:
Cot::$cache->db->remove('structure'),Cot::$cache->static->clearByUriдля товара/категории,clear('index')(если включено). - Структура:
Cot::$structure['mstore']загружается для подсчета товаров по категориям.
План улучшений (TODO)
План основан на текущем коде и ориентирован на расширение функционала без радикальных изменений.
- Текстовый поиск: Добавить параметр
sqдля поиска поmsitem_titleиmsitem_text(LIKE '%$sq%'), с полем ввода в форме и параметром$params['sq']в SQL. - Новые фильтры: Добавить в
$filter_typeфильтры по дате (msitem_date,msitem_updated), владельцу (msitem_ownerid), просмотрам (msitem_count), с селектами в форме. - Массовое редактирование: Добавить
paction='edit'вa=update_checkedдля изменения категории или статуса черезcot_mstore_update, с проверкой прав. - Экспорт в CSV: Внедрить
paction='export', собирать данные черезcot_generate_mstoretags, формировать CSV с полями (id, title, state, owner). - Экстрафилды в списке: Добавить теги экстрафилдов в
cot_generate_mstoretagsдля цикла списка, с сортировкой черезcot_mstore_config_order. - Статистика с графиками: Добавить SQL для подсчета по категориям (аналог
$sys['mstorequeued']) и теги для графиков просмотров (msitem_count). - AJAX для списка: Если
Cot::$cfg['jquery'] && Cot::$cfg['turnajax'], добавить JS для динамической загрузки списка при пагинации и сортировке. - Новые хуки: Добавить
mstore.admin.filtersдля кастомных условий в$sqlwhereиmstore.admin.custom_actionдля новых кнопок. - Безопасность: Ограничить количество товаров в
$s(например, max 100) перед массовыми действиями. - Интеграция с модулями: Добавить теги для ссылок на заказы/платежи в
mstore.admin.loop, если плагины активны.
Визуализация работы админ-панели
Схема процесса управления товарами:
____________________________
| 1. Загрузка списка |
| (SQL с фильтрами) |
|__________________________|
|
|
V
____________________________
| 2. Проверка прав доступа |
| (cot_auth, isadmin) |
|__________________________|
|
|
V
____________________________
| 3. Фильтры и сортировка |
| (filter, sorttype, way)|
|__________________________|
|
|
V
____________________________
| 4. Отображение в шаблоне |
| (cot_generate_mstoretags)|
|__________________________|
|
|
V
____________________________
| 5. Действия (валидация, |
| удаление, редактир.) |
|__________________________|
|
|
V
____________________________
| 6. Лог и очистка кэша |
| (cot_log, cache clear) |
|__________________________|