Skip to content

fix(build): объявить рабочие параметры сниппетов в snippets.php (#799) - #836

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-799-declare-snippet-properties
Open

Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-799-declare-snippet-properties

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Четыре рабочих параметра msProducts объявлены в _build/elements/snippets.php и получили описания из лексикона. Заодно сделана сверка остальных сниппетов — как и просили в issue, четыре расхождения нашлись не при целенаправленном поиске.

msProducts (из issue):

Параметр Тип Значение по умолчанию
includeOptions textfield ''
withCurrency combo-boolean false
usePackages textfield ''
tplWrapper textfield ''

Значения совпадают с дефолтами в коде ($scriptProperties['withCurrency'], getOption('payStatus', $scriptProperties, '1') и т.д.), поэтому поведение вызовов не меняется — меняется только их видимость в админке. Для withCurrency тип взят у уже объявленного msOrderTotal.withCurrency.

Сверка остальных сниппетов — добавлено:

  • msGallery.thumbnails — фильтр размеров превью;
  • msCustomer.service (list: profile/addresses/orders) и msCustomer.return — у этого сниппета массив properties был вообще пуст, то есть сетка свойств в админке была пустой;
  • msOrder.includeCustomerAddresses (combo-boolean, true);
  • msGetOrder.payStatus ('1');
  • msProductOptions.return ('').

Сверка описаний: formatPrices и hideOnThanks были объявлены, но без ключей ms3_prop_format_prices / ms3_prop_hide_on_thanks — в сетке показывался сырой ключ. Ключи добавлены.

Новый smoke-тест tests/SnippetPropertiesDeclaredTest.php закрывает класс ошибки: у каждого объявленного свойства есть ключ ms3_prop_<snake_case> в en и ru, и каждый параметр, который сниппет читает из $scriptProperties / getOption(..., $scriptProperties, ...), объявлен (кроме явного allowlist). 87 объявлений × 2 языка.

Всего 10 новых ключей лексикона в обоих языках: include_options, with_currency, use_packages, tpl_wrapper, thumbnails, include_customer_addresses, pay_status, service, format_prices, hide_on_thanks.

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

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

Связанные Issues

Closes #799

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

Опишите тесты, которые вы провели для проверки изменений.

  • Новый smoke-тест core/components/minishop3/tests/SnippetPropertiesDeclaredTest.php: пары ключей ru/en, покрытие всех $scriptProperties-чтений, allowlist с объяснениями. Во время разработки тест поймал необъявленный msProductOptions.return, который сразу добавлен.
  • Локальный CI-гейт (PHP lint + smoke + PHPUnit из .github/workflows/ci.yml):
cd core/components/minishop3
composer install
composer ci:php
composer stan

composer ci:php — OK smoke tests (122), PHPUnit Tests: 738, Assertions: 2625. В прогоне остаются 3 падения в tests/Integration/WebApi/HeadlessStorefrontErrorsTest.php (testCartAddOptionsJsonString, testChangeOptionJsonStringOptionsReturns200, testCartWithoutTokenAndFailedAutoMintReturns500) — они воспроизводятся и на чистом beta без этого изменения, к правке отношения не имеют.
composer stan — [OK] No errors. JS/Vue не затрагивался, npm run lint:ci для этой правки не требуется.

  • Ручное тестирование
  • Автоматические тесты (composer ci:php / composer test, npm run lint:ci, composer stan / GitHub Actions CI)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: 1.14.1-beta2 (ad7da5fb, ветка beta)
  • MODX: —
  • PHP: 8.5.8

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

До После
В сетке свойств msProducts 30 параметров, withCurrency/tplWrapper/includeOptions/usePackages не видны 34 параметра, у каждого есть описание из лексикона; у msCustomer вместо пустой сетки service и return

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах (allowlist и его причины в новом тесте)
  • Изменения не ломают существующую функциональность — все значения по умолчанию совпадают с кодовыми
  • Лексиконы добавлены на двух языках (ru/en) — 10 ключей в каждом, наборы ключей ru/en идентичны
  • PHPStan проходит без новых ошибок (composer stan / CI job PHPStan)
  • ESLint проходит без ошибок (npm run lint:ci для Vue) — JS не менялся
  • Обновлён CHANGELOG.md — запись добавляется при подготовке релиза

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

Три момента, найденных при сверке, намеренно не трогал — они меняют поведение, а не только метаданные:

  1. msGallery.return объявлен со значением tpl, а код при отсутствии свойства берёт data (ms3_gallery.php:77). Объявленное значение побеждает, поэтому фактический дефолт сейчас tpl. «Исправлять» на data нельзя без обсуждения — это сломает сайты, полагающиеся на текущее поведение. Нужен отдельный issue.
  2. msGetOrder.id объявлен быть не может: $orderIdentifier = $scriptProperties['id'] ?? $_GET['msorder'] ?? null, и объявленный дефолт '' перекрыл бы фолбэк на query-параметр. Оставлено в allowlist теста с комментарием.
  3. msCustomer.tpl, orderTpl, detailTpl, addressTpl, formTpl, limit читаются сервисами страниц, и дефолт tpl у них свой для каждого раздела (tpl.msCustomer.profile / .orders / .addresses). Одно объявление tpl на весь сниппет сделало бы дефолтом чанк чужого раздела, поэтому не объявлял; при желании — отдельная задача на раздельные имена вида tplProfile.

Также в lexicon/properties.inc.php осталось 15 ключей miniShop2, не соответствующих ни одному объявленному свойству и ни разу не читаемых кодом (ms3_prop_tpl_row, ms3_prop_option_name, ms3_prop_fast_mode и др.). Удаление — отдельная задача по лексикону, здесь не делал, чтобы не мешать с правкой объявлений.

Четыре параметра msProducts (includeOptions, withCurrency, usePackages,
tplWrapper) работали, но не были объявлены — в админке их не предложить,
а resolver_08 не проставляет desc. По результатам сверки остальных
сниппетов добавлены msGallery.thumbnails, msCustomer.service/return,
msOrder.includeCustomerAddresses, msGetOrder.payStatus,
msProductOptions.return и описания для formatPrices/hideOnThanks.

Новый smoke-тест не даёт объявлениям и лексикону разойтись снова.
@Ibochkarev
Ibochkarev requested a review from biz87 October 5, 2026 17:53
@Ibochkarev Ibochkarev self-assigned this Oct 5, 2026
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.

[Build] Четыре рабочих параметра msProducts не объявлены в свойствах сниппета

1 participant