Skip to content

feat: add _formatted placeholders for currency and weight display#147

Draft
Ibochkarev wants to merge 1 commit intobetafrom
feat/144-formatted-currency-weight-placeholders
Draft

feat: add _formatted placeholders for currency and weight display#147
Ibochkarev wants to merge 1 commit intobetafrom
feat/144-formatted-currency-weight-placeholders

Conversation

@Ibochkarev
Copy link
Member

@Ibochkarev Ibochkarev commented Mar 13, 2026

Описание

Системные настройки становятся единственным источником истины для символа
валюты и единиц веса. Сниппеты теперь предварительно форматируют значения
через Format::price($value, true) и Format::weightWithUnit() и передают
результат в чанки через новые *_formatted плейсхолдеры. Чанки используют
готовые строки без лексиконных вызовов для валюты и веса.

Ранее символ валюты и единица веса отображались в чанках через лексиконы
({'ms3_frontend_currency'|lexicon}, {'ms3_frontend_weight_unit'|lexicon}),
хотя системные настройки (ms3_currency_symbol, ms3_currency_position) уже
управляли форматированием в PHP. Изменение символа валюты в системной
настройке не затрагивало вывод в чанках.

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

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

Связанные Issues

Closes #144

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

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

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

  • MiniShop3:
  • MODX:
  • PHP:

Чеклист

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

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

Обратная совместимость:

  • Сырые числовые поля (price, cost, weight) не удалены — JS-логика не затронута
  • Лексиконные ключи ms3_frontend_currency и ms3_frontend_weight_unit сохранены,
    но не используются core-чанками
  • Пользовательские чанки продолжат работать; рекомендуется обновить их по образцу
    обновлённых чанков, заменив лексиконные вызовы на *_formatted плейсхолдеры

Особые места кода:

  • ms3_order.tpl — JS динамически обновляет span'ы #ms3_order_cost и др., поэтому
    лексикон заменён на {$order.currency_symbol} (передаётся из сниппета), а не на
    _formatted плейсхолдер
  • ms3_get_order.php — сохраняются raw-числа до форматирования, чтобы _formatted
    поля получали корректный числовой вход

System settings become the single source of truth for currency symbol,
currency position, and weight unit. Snippets now pre-format values via
Format::price($value, true) and Format::weightWithUnit() and pass them
to chunks as *_formatted fields, eliminating lexicon calls for display.

- Format.php: add weightWithUnit(), getWeightUnit(), getCurrencySymbol(),
  extend getSettings() with weight_unit
- settings.php + lexicons (ru/en): add ms3_weight_unit system setting
- Snippets (ms3_cart, ms3_order_total, ms3_order, ms3_get_order): add
  price_formatted, cost_formatted, weight_formatted, cart_cost_formatted,
  delivery_cost_formatted, total_cost_formatted alongside raw numeric fields
- ms3_order.php: expose currency_symbol for JS-updated cost spans
- OrdersPageService: add _formatted fields to order list and detail data,
  fix raw numeric values before formatting in getOrderProducts()
- Notification.php: add _formatted fields to products and total array
- Chunks: replace {'ms3_frontend_currency'|lexicon} and
  {'ms3_frontend_weight_unit'|lexicon} with *_formatted placeholders

Lexicon keys ms3_frontend_currency and ms3_frontend_weight_unit are
retained for backward compatibility but no longer used by core chunks.
@Ibochkarev
Copy link
Member Author

@biz87 проверь плиз туда ли я пошел или нужно было сделать иначе

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.

[Refactor] Дублирование механизмов отображения валюты и единиц измерения

1 participant