Skip to content

fix(resource): конвертация modDocument → msProduct (#329)#331

Open
Ibochkarev wants to merge 1 commit into
modx-pro:betafrom
Ibochkarev:fix/329-resource-type-conversion
Open

fix(resource): конвертация modDocument → msProduct (#329)#331
Ibochkarev wants to merge 1 commit into
modx-pro:betafrom
Ibochkarev:fix/329-resource-type-conversion

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

При смене типа ресурса с «Документ» на «Товар магазина» в настройках MODX возвращал resource_err_nfs («Ресурс с ID … не найден»), сохранение не проходило.

Product/Update не переопределял initialize(): родительский процессор ищет объект строго по class_key = msProduct, пока в БД ещё modDocument. Для категорий этот обход уже был в Category/Update.

Добавлен общий trait EnsureTargetClassKeyTrait: перед parent::initialize() временно записывает целевой class_key через modResource. Trait подключён в Category/Update (рефакторинг без изменения поведения) и Product/Update (fix #329). UpdateFromGrid получает fix через parent::initialize().

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

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

Связанные Issues

Closes #329

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

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

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

  • MiniShop3: branch fix/329-resource-type-conversion
  • MODX: —
  • PHP: 8.2+ (php -l на изменённых файлах)

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

  1. Создать ресурс как Документ → сохранить
  2. Настройки → Тип ресурса → Товар магазина → Сохранить
  3. Ожидание: без resource_err_nfs, class_key = msProduct, строка в ms3_product_data

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

До После
resource_err_nfs при смене типа Ресурс сохраняется как товар

Чеклист

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

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

  • Создание msProductData после save по-прежнему через ProductService::handleConversion() в плагине OnDocFormSave
  • Регрессия: modDocument → msCategory (trait в Category/Update), обычный save существующего msProduct

Product Update processor failed to load the resource when class_key was
changed in settings because parent initialize() requires msProduct in DB.
Extract EnsureTargetClassKeyTrait from Category/Update and reuse in
Product/Update. Closes modx-pro#329.
@Ibochkarev Ibochkarev requested a review from biz87 July 3, 2026 13:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant