Skip to content

[Bug] Нет индивидуального menuindex для товаров в дополнительных категориях #625

Description

@cursor

Описание проблемы

Товары, добавленные в категорию через вкладку «Категории» (галочки / дополнительные категории), не имеют отдельного menuindex в контексте этой категории.

У товара один глобальный menuindex в ресурсе (site_content / msProduct). Связь с доп. категориями хранится в ms3_product_categories (msCategoryMember) только как пара product_id + category_id — поля порядка нет.

Из-за этого нельзя независимо выстроить выкладку одного и того же товара в разных категориях.

Шаги воспроизведения

  1. Создать категорию A (основную) и категории B, C.
  2. Создать товары в категории A.
  3. На вкладке «Категории» у товаров отметить галочками категории B и/или C.
  4. Открыть категорию B (или C) в менеджере → грид товаров.
  5. Попытаться задать порядок выкладки (DnD / menuindex) отдельно от категории A и от других категорий.
  6. На витрине вывести товары категории B через ms3_products с сортировкой по menuindex.

Ожидаемое поведение

  • Для каждой пары «товар ↔ категория» (включая дополнительные категории) можно задать свой порядок.
  • DnD / изменение порядка в категории B не ломает порядок в категории A (и наоборот).
  • На витрине при &sortby=menuindex`` порядок в категории учитывает контекст этой категории, а не только основной parent товара.

Фактическое поведение

  • ms3_product_categories хранит только product_id и category_id — без menuindex.
  • ProductDataService::saveCategories() сохраняет список id категорий ([3,4,27]), без порядка.
  • CategoryProductsController::sort пишет в глобальный msProduct.menuindex ресурса.
  • Грид категории (CategoryProductsListService) показывает только товары с parent в этой категории; товары, попавшие только через msCategoryMember, в гриде не видны — настроить их выкладку в этой категории нельзя.
  • ms3_products подтягивает товары из доп. категорий через msCategoryMember, но сортирует по обычному menuindex/id товара, без порядка на категорию.

Скриншоты

Не применимо (проблема модели данных / API, воспроизводится по шагам выше).

Окружение

  • MiniShop3: текущая beta (ветка modx-pro/MiniShop3)
  • MODX: 3.x
  • PHP: 8.x
  • MySQL: 8.x
  • Браузер: не зависит от браузера

Логи ошибок

Логи из core/cache/logs/error.log
Ошибок в логе нет — это ограничение модели данных, а не runtime-exception.

Дополнительный контекст

Затронутые места в коде (актуально на beta):

  • Модель: core/components/minishop3/src/Model/mysql/msCategoryMember.php — поля только product_id, category_id
  • Сохранение категорий: ProductDataService::saveCategories()
  • Сортировка в админке: CategoryProductsController::sortmsProduct.menuindex
  • Список в гриде категории: CategoryProductsListService (фильтр по parent, без join к msCategoryMember)
  • Витрина: elements/snippets/ms3_products.php (OR по member ids, sort без per-category index)

Возможное направление фикса (для обсуждения):

  • Добавить menuindex в ms3_product_categories (или отдельную таблицу (product_id, category_id, menuindex)).
  • Учитывать его в DnD/API грида категории и в ms3_products при сортировке по menuindex в контексте категории.
  • Для «родных» товаров (parent = категория) можно оставить текущий msProduct.menuindex; для «чужих» — значение из связи.

Наследие MS2: у товара один menuindex на ресурс при множественных категориях; в MS3 схема связи не расширена.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions