feat(web-api): seo-блок для product/category get - #599
Conversation
|
Влил #597 (facets) — этот PR теперь конфликтует с Хорошая новость: конфликт тривиальный, всего два файла и чистый union — обе стороны регистрируют свой сервис в одном месте: Нужны обе записи. Проверил локально: после union-резолва всё зелёное — smoke 90, PHPUnit 273. То есть после ребейза PR готов, вопросов по содержанию нет. Заметил, что ты добавляешь новое событие |
Headless SSR needs a stable title/canonical/og contract instead of guessing longtitle vs pagetitle and joining site_url by hand.
|
Ребейзнул на текущую Локально: smoke 90, PHPUnit 273, Про |
4a05882 to
c870b01
Compare
Описание
В ответах
GET /api/v1/product/get/{id}иGET /api/v1/category/get/{id}появляется объектseoсtitle,description,canonical,robotsиog.{title,description,image,type}. Nuxt SSR может собрать<title>, meta description, canonical и базовый Open Graph без своей угадайки по полям ресурса.Плоские поля (
pagetitle,longtitle,description,uri,image/thumb) не меняются.product/list,category/listиcategory/treeполныйseoне отдают.Тип изменений
Связанные Issues
Closes #567
Как это было протестировано?
Локальный CI-гейт (без полной установки MODX/MySQL):
cd core/components/minishop3 php -l src/Services/Seo/PublicSeoBuilder.php php -l src/Services/Seo/PublicSeoService.php composer test:smoke composer ci:php composer stanphp -l(затронутые PHP)composer test:smokecomposer ci:phpcomposer stancomposer ci:php/composer test,npm run lint:ci,composer stan/ GitHub Actions CI)Конфигурация тестирования:
feat/issue-567-public-seo-blockотbetaСкриншоты (если применимо)
Не применимо (JSON API).
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue) — Vue не трогалиДополнительные заметки
Правила derivation:
title← непустойlongtitle, иначеpagetitle.description← непустойdescription, иначеintrotext.canonicalиog.image— absolute URL изsite_urlконтекста (?context=илиcontext_keyресурса) + relative path.robotsдля уже публичных сущностей:index,follow.og.type:product/website.include_seo=0на get убирает ключseo. Default на get — включено.Опциональный хук
msOnGetPublicSeo: плагин патчит$modx->event->returnedValues['seo']. Патч толькоtitleзеркалится вog.title, пока плагин сам не задалog.title. Whitelist отбрасывает неизвестные ключи и не-скаляры. TV mapms3_public_seo_tv_mapв этот PR не входит.Событие появится в Manager после rebuild/upgrade пакета.
Follow-up: get по
uri/alias, multi-size og из галереи (#566),include_seoна list.