Skip to content

feat(extra-fields): add ms3-key-value field type#323

Open
Ibochkarev wants to merge 4 commits into
modx-pro:betafrom
Ibochkarev:feat/300-key-value-extra-field
Open

feat(extra-fields): add ms3-key-value field type#323
Ibochkarev wants to merge 4 commits into
modx-pro:betafrom
Ibochkarev:feat/300-key-value-extra-field

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Jun 24, 2026

Copy link
Copy Markdown
Member

Описание

Тип extra field ms3-key-value: плоский JSON-объект (ключ → значение) с конфигом в колонке key_value_config.

Режимы:

  • fixed — ключи из схемы (label, string/number, required)
  • free — произвольные пары в UI

Backend: KeyValueFieldService (decode → normalize → validate, strip-first для unknown keys), Phinx-миграция, ServiceRegistry, ExtraFieldsService, ProductDataService (whitelist, обход prepareOptionValues, lexicon-ошибки в prepareObject), нормализация extra fields в OrdersController.

Frontend: KeyValueField, KeyValueSchemaEditor, structuredExtraField.js, DynamicField, ExtraFieldsManager, ProductDataFields, OrderView, OrderExtraFieldsSection.

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

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

Связанные Issues

Closes #300

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

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

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

  • MiniShop3: feat/300-key-value-extra-field от beta
  • MODX: не запускался
  • PHP: локальный CLI

Проверки (exit 0):

  • php -lKeyValueFieldService.php, миграция, ExtraFieldsService.php, ProductDataService.php, OrdersController.php, ServiceRegistry.php, msExtraField.php, KeyValueFieldServiceTest.php
  • php core/components/minishop3/tests/KeyValueFieldServiceTest.phpOK
  • npx eslintKeyValueField.vue, KeyValueSchemaEditor.vue, keyValueField.js, structuredExtraField.js, DynamicField.vue, ExtraFieldsManager.vue, ProductDataFields.vue, OrderView.vue, OrderExtraFieldsSection.vue

PHPStan и полный прогон на MODX не выполнялись.

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

Не приложены. Визуальная проверка форм менеджера локально.

Чеклист

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

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

Паттерн как у ms3-repeater (#301). CHANGELOG / docs/changelog.txt не трогали — записи при релизе.

Доработки после review:

  • default mode: fixed согласован PHP/JS
  • hydration и col-12 в product data / заказах
  • free mode: стабильные id строк, warning при дубликате ключа, InputNumber для schema number
  • prepareObject пробрасывает lexicon-ошибку валидации
  • smoke-тест KeyValueFieldServiceTest.php
  • encodeConfig / numeric cast (1e31000)

Вне MVP #300: PHP dispatcher для structured xtypes; валидация на Web checkout; CSV-импорт; клиентская валидация до save; docs.modx.pro; подключение smoke-теста к CI (в репо пока нет такого workflow).

Introduce configurable key-value extra fields with fixed and free modes,
backend validation via KeyValueFieldService, and Vue editor components
for manager forms and extra field definitions.

Closes modx-pro#300
@Ibochkarev Ibochkarev added the enhancement New feature or request label Jul 16, 2026
Align Vue defaults and product/order hydration with the repeater pattern,
stabilize free-mode editing, add KeyValueFieldService smoke tests, and
document the type in the package changelog.
Changelog notes for ms3-key-value belong at release time, not in this PR.
Surface prepareObject validation errors with lexicon messages, warn on
duplicate free-mode keys, document strip-first unknown-key handling,
and harden numeric casting / config encoding.
@Ibochkarev Ibochkarev requested a review from biz87 July 16, 2026 05:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Тип поля key=value (ms3-key-value) для extra fields

1 participant