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
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions