Skip to content

[Feature] Поддержка колонок с опциями товара в таблице "Список товаров" #140

@biz87

Description

@biz87

Feature description

Добавить возможность выводить опции товара как колонки в таблице товаров категории (category-products grid).

Сейчас таблица товаров отображает только поля из msProduct и msProductData (цена, артикул, вес и т.д.). Опции товара (ms3_product_options) в таблице недоступны — для просмотра значения нужно заходить в карточку каждого товара.

На практике одиночные опции (длина, ширина, материал и т.п.) часто нужны для быстрого просмотра и сравнения товаров прямо в списке.

Proposed solution

Добавить новый тип поля option в систему Grid Config, который делает LEFT JOIN на ms3_product_options по конкретному ключу опции.

Что нужно доработать:

1. GridConfigService — новый тип option:

  • Конфигурация: { "type": "option", "option": { "key": "length" } }
  • JOIN: LEFT JOIN ms3_product_options AS opt_{key} ON opt_{key}.product_id = msProduct.id AND opt_{key}.key = '{key}'
  • SELECT: opt_{key}.value AS option_{key}

2. CategoryProductsController — поддержка динамических колонок:

  • Загрузка grid config (как уже сделано в OrdersController и CustomersController)
  • Извлечение option-полей и построение JOIN'ов
  • Включение значений в ответ formatProduct()

3. Vue (CategoryProductsGrid) — колонки option-типа уже будут работать как обычные model-колонки, дополнительных доработок на фронте не требуется.

Ограничения:

  • Поддерживаются только одиночные опции (один value на товар). Мультизначные опции (ComboMultiple) потребуют агрегации и выходят за рамки этой задачи
  • Сортировка и фильтрация по опциям — в рамках этой же задачи через стандартные механизмы SQL

Alternatives considered

  • Computed fields с пакетной загрузкой через OptionService::loadOptionsForProducts() — проще в реализации, но менее эффективно (доп. запрос) и не поддерживает нативную сортировку/фильтрацию по опции
  • Расширение типа relation — не ложится на составной JOIN (product_id + key), потребовались бы костыли

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions