Продолжение #567, который закрывает #599. В #567 и в описании #599 записаны пункты на потом. После закрытия #567 они потеряются, поэтому собраны здесь.
Что осталось
1. Карта TV-полей. В #567 предложена системная настройка ms3_public_seo_tv_map — JSON вида {"title":"tv.seo_title","robots":"tv.robots"}, читать только явно перечисленные TV. В #599 не реализована, в описании PR это сказано прямо.
2. robots по searchable. Сейчас robots всегда index,follow. По #567: если searchable попадёт в allowlist, searchable=0 должен давать noindex,nofollow.
3. Canonical при выключенных friendly URLs. PublicSeoBuilder::absoluteUrl() склеивает базовый адрес и путь строкой: $base . '/' . ltrim($path, '/'). Canonical собирается из site_url и uri. При friendly_urls=0 uri не является рабочим адресом страницы, и canonical получится нерабочим. Вариант — строить адрес через modX::makeUrl() с учётом контекста.
4. include_seo для списков. product/list, category/list и category/tree блок не отдают — в описании #599 это follow-up.
5. og-изображения нескольких размеров из галереи. Тоже follow-up из описания #599, со ссылкой на #566. Проверить, актуально ли после #598.
6. Событие msOnGetPublicSeo. Зарегистрировано в _build/elements/events.php в секции событий товара, хотя вызывается и для категорий. В документации не описано.
Критерии приёмки
Контекст
Продолжение #567, который закрывает #599. В #567 и в описании #599 записаны пункты на потом. После закрытия #567 они потеряются, поэтому собраны здесь.
Что осталось
1. Карта TV-полей. В #567 предложена системная настройка
ms3_public_seo_tv_map— JSON вида{"title":"tv.seo_title","robots":"tv.robots"}, читать только явно перечисленные TV. В #599 не реализована, в описании PR это сказано прямо.2.
robotsпоsearchable. Сейчасrobotsвсегдаindex,follow. По #567: еслиsearchableпопадёт в allowlist,searchable=0должен даватьnoindex,nofollow.3. Canonical при выключенных friendly URLs.
PublicSeoBuilder::absoluteUrl()склеивает базовый адрес и путь строкой:$base . '/' . ltrim($path, '/'). Canonical собирается изsite_urlиuri. Приfriendly_urls=0uriне является рабочим адресом страницы, и canonical получится нерабочим. Вариант — строить адрес черезmodX::makeUrl()с учётом контекста.4.
include_seoдля списков.product/list,category/listиcategory/treeблок не отдают — в описании #599 это follow-up.5. og-изображения нескольких размеров из галереи. Тоже follow-up из описания #599, со ссылкой на #566. Проверить, актуально ли после #598.
6. Событие
msOnGetPublicSeo. Зарегистрировано в_build/elements/events.phpв секции событий товара, хотя вызывается и для категорий. В документации не описано.Критерии приёмки
friendly_urls=0, либо ограничение задокументированоmsOnGetPublicSeoописано в документацииКонтекст
getById(), поэтому seo-блок попадает и туда