Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

2025-08-18 18:53

Админ-панель 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).
  • Ограничение по категориям: Показываются товары только из категорий, доступных администратору (через 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), счетчик товаров в категории (SUM structure_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().
  • Отмена валидации (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)

План основан на текущем коде и ориентирован на расширение функционала без радикальных изменений.

  1. Текстовый поиск: Добавить параметр sq для поиска по msitem_title и msitem_text (LIKE '%$sq%'), с полем ввода в форме и параметром $params['sq'] в SQL.
  2. Новые фильтры: Добавить в $filter_type фильтры по дате (msitem_date, msitem_updated), владельцу (msitem_ownerid), просмотрам (msitem_count), с селектами в форме.
  3. Массовое редактирование: Добавить paction='edit' в a=update_checked для изменения категории или статуса через cot_mstore_update, с проверкой прав.
  4. Экспорт в CSV: Внедрить paction='export', собирать данные через cot_generate_mstoretags, формировать CSV с полями (id, title, state, owner).
  5. Экстрафилды в списке: Добавить теги экстрафилдов в cot_generate_mstoretags для цикла списка, с сортировкой через cot_mstore_config_order.
  6. Статистика с графиками: Добавить SQL для подсчета по категориям (аналог $sys['mstorequeued']) и теги для графиков просмотров (msitem_count).
  7. AJAX для списка: Если Cot::$cfg['jquery'] && Cot::$cfg['turnajax'], добавить JS для динамической загрузки списка при пагинации и сортировке.
  8. Новые хуки: Добавить mstore.admin.filters для кастомных условий в $sqlwhere и mstore.admin.custom_action для новых кнопок.
  9. Безопасность: Ограничить количество товаров в $s (например, max 100) перед массовыми действиями.
  10. Интеграция с модулями: Добавить теги для ссылок на заказы/платежи в 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) |
    |__________________________|
    
Account