Skip to content

fix(product): сохранение options-* при обновлении товара, MODX 3#236

Open
Ibochkarev wants to merge 1 commit intomodx-pro:betafrom
Ibochkarev:fix/199-product-options-update-processor
Open

fix(product): сохранение options-* при обновлении товара, MODX 3#236
Ibochkarev wants to merge 1 commit intomodx-pro:betafrom
Ibochkarev:fix/199-product-options-update-processor

Conversation

@Ibochkarev
Copy link
Copy Markdown
Member

Описание

В MiniShop3\Processors\Product\Update массив опций из полей options-* больше не читается через getProperty('options') после parent::afterSave(): в MODX 3 к этому моменту свойство часто пустое, поэтому не вызывался ProductDataService::saveOptions(..., removeOther: true) — строки в ms3_product_options оставались (сценарий issue #199: копирование товара, удаление опции, сохранение, значение снова после перезагрузки).

Парсинг по-прежнему в beforeSet(), снимок хранится в $ms3ProductFormOptions и передаётся в сервис в afterSave().

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

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

Связанные Issues

Closes #199

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

Рекомендуемая проверка: товар в категории с опцией(ями) — задать значение — сохранить — очистить/удалить опцию (или сценарий с копированием товара, как в #199) — сохранить — перезагрузить карточку; убедиться, что в ms3_product_options нет «лишних» строк по ожидаемой политике removeOther.

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

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

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

N/A (изменения только в PHP-процессоре)

Чеклист

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

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

Связанные с более ранним фиксом: removeOther=true при явном списке из формы; JSON-only путь saveOptions(null) в msProductData::save() с removeOther=false не затрагивается (#153, #158).

…Save (modx-pro#199)

- Capture options-* in beforeSet (ms3ProductFormOptions); MODX 3 may clear
  getProperty('options') after parent::afterSave(), so explicit saveOptions with
  removeOther=true was skipped and ms3_product_options rows could remain.
- CHANGELOG: note follow-up to modx-pro#199/modx-pro#202

Fixes modx-pro#199
@Ibochkarev Ibochkarev changed the title fix(product): сохранение options-* при обновлении товара, MODX 3 (#199) fix(product): сохранение options-* при обновлении товара, MODX 3 Apr 27, 2026
@Ibochkarev Ibochkarev requested a review from biz87 April 27, 2026 02:03
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] Не удаляется опция из товара

1 participant