Skip to content

fix(grid): relation-поля в гриде «Товары категории» (#328)#330

Open
Ibochkarev wants to merge 1 commit into
modx-pro:betafrom
Ibochkarev:fix/328-category-products-relation-grid
Open

fix(grid): relation-поля в гриде «Товары категории» (#328)#330
Ibochkarev wants to merge 1 commit into
modx-pro:betafrom
Ibochkarev:fix/328-category-products-relation-grid

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Relation-поля (тип relation) в утилите «Поля таблиц» для грида «Товары категории» сохранялись в конфиге, но при загрузке списка не резолвились: вместо адреса/телефона производителя показывался сырой vendor_id, id или название категории.

Добавлен JOIN/SELECT для relation-колонок в CategoryProductsListService по паттерну orders. Для FK на msProductData (например vendor_id) JOIN идёт через alias Data, а не msProduct. Расширен resolveModelClass() для имён таблиц ms3_vendors / с префиксом. Добавлены валидация SQL-идентификаторов, проверка коллизий имён с builtin-колонками и статический тест.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #328

Как это было протестировано?

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: branch fix/328-category-products-relation-grid
  • MODX: —
  • PHP: 8.2+ (php -l, php tests/RelationColumnSpecTest.php)

Проверки:

  • php -l на всех изменённых PHP-файлах
  • php tests/RelationColumnSpecTest.php — join condition, reserved names, SQL identifier guard

Ручной сценарий (после деплоя):

  1. Настройки → Производители: создать vendor с address/phone
  2. Утилиты → Поля таблиц → Товары категории: relation-поле vendor_address (msVendor / ms3_vendors, FK vendor_id, display address)
  3. В гриде категории отображается текст адреса, не число

Скриншоты (если применимо)

До После
Сырой FK / id / category_name Resolved значение из связанной таблицы

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — не требуется, UI-строки не менялись
  • PHPStan проходит без новых ошибок — не запускался локально
  • ESLint проходит без ошибок (для JS/Vue изменений) — Vue не менялся
  • Обновлён CHANGELOG.md (для значимых изменений) — по политике репозитория не в scope PR

Дополнительные заметки

  • Новые классы: GridRelationColumnResolver, RelationColumnSpec, GridColumnRules, ProductDataForeignKeys
  • Для relation-полей в category-products рекомендуется имя вроде vendor_address, не vendor_id (builtin-колонка)
  • aggregation для relation в category-products явно запрещён при сохранении конфига
  • Frontend не менялся: API отдаёт resolved values, Vue выводит product[column.name]

Category products list now JOINs related tables for relation-type grid
columns (e.g. vendor address via vendor_id on msProductData). Adds
GridRelationColumnResolver, SQL identifier validation, and reserved
field name checks. Closes modx-pro#328.
@Ibochkarev Ibochkarev requested a review from biz87 July 3, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] MiniShop3 :: Утилиты баг вывода в поле таблиц (Товары категории)

1 participant