Skip to content

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

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

fix(resource): конвертация modDocument → msProduct#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
@Ibochkarev Ibochkarev changed the title fix(resource): конвертация modDocument → msProduct (#329) fix(resource): конвертация modDocument → msProduct Jul 16, 2026
@Ibochkarev Ibochkarev added the bug Something isn't working label Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

1 participant