|
17 | 17 |
|
18 | 18 | ## Апрель 2026 |
19 | 19 |
|
| 20 | +### [2026-04-27] 🚀 Версия 1.10.1-beta1 |
| 21 | + |
| 22 | +**Тип релиза:** PATCH (beta) — точечные исправления и восстановление контракта событий |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +#### 🐛 Исправлено |
| 27 | + |
| 28 | +**Manager API — события жизненного цикла позиции заказа (#208, closes #207):** |
| 29 | +- Vue-админка дёргает `msOnBefore/Create/Update/Remove OrderProduct` через `Utils::invokeEvent` при добавлении/изменении/удалении позиций заказа — раньше события были зарегистрированы в `events.php`, но `OrdersController` их не вызывал, и сторонние подписчики (ms3PromoCode и т.п.) не срабатывали. |
| 30 | +- Before-hooks могут заблокировать операцию через `Response::error(400)`. After-hooks логируются на WARN-уровне с маркером `(persistence already done)` — ошибка плагина после `save()`/`remove()` не возвращается клиенту как 4xx, потому что persistence уже произошёл. |
| 31 | + |
| 32 | +**Опции товара — переключение групп больше не сбрасывает значения (#230):** |
| 33 | +- `ProductOptionsTab.vue` рендерит все группы сразу с `v-show` вместо `v-if`-style монтирования только активной — локальные `value = ref(...)` и hidden inputs сохраняются между переключениями вкладок. |
| 34 | +- Раньше значения, введённые в неактивной группе, терялись и не доезжали на бэкенд (MODX/ExtJS `BasicForm.getValues()` собирает только инпуты, физически присутствующие в DOM на момент сабмита). |
| 35 | + |
| 36 | +**Опции товара — висячие `modcategory_id` после удаления категории (#228):** |
| 37 | +- Плагин `MiniShop3` подписан на `OnCategoryRemove` — обнуляет `msOption.modcategory_id` для всех опций, ссылавшихся на удалённую `modCategory`. Зеркалит штатный паттерн MODX, где `modCategory::remove()` сбрасывает `category` у `modChunk`/`modPlugin`/`modSnippet`/`modTemplate`/`modTemplateVar`. |
| 38 | +- Без фикса в карточке товара мог появиться второй таб «Без группы» с разными мёртвыми `modcategory_id`. |
| 39 | + |
| 40 | +**OrderFinalizeService вызывал несуществующие события (#217):** |
| 41 | +- `msOnBeforeFinalizeOrder` / `msOnFinalizeOrder` нигде не были зарегистрированы как `modEvent`, подписать плагин через UI было нельзя. Заменены на `msOnBeforeMgrCreateOrder` / `msOnMgrCreateOrder` — уже существовали в билдере, но никем не вызывались. |
| 42 | + |
| 43 | +**Импорт товаров — неправильный ключ system setting для дефолтного шаблона (#210):** |
| 44 | +- `Processors\Utilities\Import\Fields::getTvFields()` использовал несуществующий ключ `ms3_product_default_template`. Корректный ключ — `ms3_template_product_default` (используется в `controllers/product/create.class.php`). Из-за опечатки на экране импорта блок «TV-поля» перечислял все TV вместо только привязанных к шаблону-дефолту. |
| 45 | + |
| 46 | +**Cart API — отсутствующий лексикон (#223, closes #222):** |
| 47 | +- Добавлен ключ `ms3_cart_get_success` в `lexicon/{ru,en}/cart.inc.php` — ключ использовался в `Cart::get()`, но без перевода MODX писал в лог `Language string not found`. |
| 48 | + |
| 49 | +**ServiceRegistry — лишний debug-шум в логах (#225, closes #224):** |
| 50 | +- На штатной установке без кастомизации сервисов `loadMainConfig()` / `loadAddonConfigs()` писали DEBUG про отсутствие дефолтных override-путей. Теперь логирование срабатывает только если оператор явно задал `ms3_services_config` / `ms3_services_addons_dir` через system settings, а файла/папки по этому пути нет. |
| 51 | + |
| 52 | +#### 📁 Изменённые файлы |
| 53 | + |
| 54 | +``` |
| 55 | +_build/elements/plugins.php |
| 56 | +core/components/minishop3/elements/plugins/minishop3.php |
| 57 | +core/components/minishop3/lexicon/en/cart.inc.php |
| 58 | +core/components/minishop3/lexicon/ru/cart.inc.php |
| 59 | +core/components/minishop3/src/Controllers/Api/Manager/OrdersController.php |
| 60 | +core/components/minishop3/src/Processors/Utilities/Import/Fields.php |
| 61 | +core/components/minishop3/src/ServiceRegistry.php |
| 62 | +core/components/minishop3/src/Services/Order/OrderFinalizeService.php |
| 63 | +vueManager/src/components/product/ProductOptionsTab.vue |
| 64 | +``` |
| 65 | + |
| 66 | +--- |
| 67 | + |
20 | 68 | ### 🚀 Версия 1.10.0-beta1 |
21 | 69 |
|
22 | 70 | **Тип релиза:** MINOR (beta) — полный перевод управления опциями с ExtJS на Vue, рефакторинг карточки заказа, self-heal миграция |
|
0 commit comments