Микроразметка раздела товаров
Вывод данных по schema.org/Product, без доп. запросов.
Название, описание и изображение будем брать из данных раздела ($arResult). Данные о цене возьмём из умного фильтра через глобальную переменную (так себе вариант, зато не нужно лишний раз лезть в БД). А данные о количестве товаров возьмём из пагинации.
Начнём с умного фильтра, в component_epilog.php закидываем данные в глоб. переменную:
global $arFilterPriceData; $arPrice = current($arResult["PRICES"]); $arFilterPriceData = $arResult["ITEMS"][$arPrice["CODE"]];
Далее в компоненте раздела товаров, в result_modifier.php добавляем данные из нав. цепочки:
$cp = $this->__component; // объект компонента if (is_object($cp)) { $arResult['CNT-ITEMS'] = $arResult["NAV_RESULT"]->NavRecordCount, // кол-вот товаров $cp->SetResultCacheKeys(array('CNT-ITEMS', 'PICTURE')); }
И в файле component_epilog.php выводим в нужном виде.
<?global $arFilterPriceData;?> <script type="application/ld+json"> { "@context": "https://schema.org/", "@type": "Product", "name": "<?=$arResult["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"] ?: $arResult['NAME'];?>", "description": "<?=$arResult["IPROPERTY_VALUES"]["SECTION_META_DESCRIPTION"] ?: $APPLICATION->GetPageProperty('description')?>", "image": "https://<?=SITE_SERVER_NAME ?: $_SERVER['SERVER_NAME']?><?=$arResult['PICTURE']['SRC']?>", "offers": { "@type": "AggregateOffer", "priceCurrency": "<?=$arFilterPriceData['VALUES']["MIN"]["CURRENCY"]?>", "lowPrice": "<?=$arFilterPriceData['VALUES']["MIN"]["VALUE"]?>", "highPrice": "<?=$arFilterPriceData['VALUES']["MAX"]["VALUE"]?>", "offerCount": "<?=$arResult['CNT-ITEMS']?>" } } </script>
И проверяем валидатором, например от яндекса
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.