Россия

region-img

Документация Сотбит: Микроразметка Schema.org. Для разработчика. Пример автоматизации заполнения сущности Product

Пример автоматизации заполнения сущности Product

Автоматизация заполнения сущности «Product» на примере стандартного шаблона «1С-Битрикс: Управление сайтом.»

Добавьте генерацию микроразметки на детальную страницу товара:

  1. Перейдите в административную часть сайта.

  2. Далее зайдите в раздел «Каталог»

  3. Перейдите к файлу эпилога шаблона компонента детальной страницы товара. Для стандартного шаблона это: [Файлы и папки/bitrix/components/bitrix/catalog.element/templates/.default/component_epilog.php]

  4. Для других шаблонов примеры пути к файлу можно посмотреть по ссылке.
  5. Вставьте код обработки данных микро-разметки типа «Product» в конец файла.

    Для этого нажмите правой кнопкой на файл «component_epilog.php», далее «Редактировать как PHP»

    Код обработчика:

    	 <?
    	 if( \Bitrix\Main\Loader::includeModule('sotbit.schemaorg') && strpos($APPLICATION->GetCurPage(), "bitrix") === false )
    	 {
    	     Sotbit\Schemaorg\EventHandlers::makeContent($APPLICATION->GetCurPage(false), 'Product');
    	     $data = SchemaMain::getData();
    	     if(!empty($data))
    	     {
    	         foreach ($data as $k => &$dat)
    	         {
    	             if ($dat['@type'] == 'Product')
    	             {
    	                 $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    	                 if (!empty($arResult['NAME']))
    	                     $dat['name'] = $arResult['NAME'];
    	                 else {
    	                     $dat = [];
    	                     continue;
    	                 }
    	                 if (!empty($arResult['PREVIEW_TEXT']))
    	                     $dat['description'] = $arResult['PREVIEW_TEXT'];
    	                 else if (!empty($arResult['DETAIL_TEXT']))
    	                     $dat['description'] = $arResult['DETAIL_TEXT'];
    	                 (!empty($arResult['SKU']) ? $dat['sku'] = $arResult['SKU'] : "");
    	                 if (!empty($arResult['PREVIEW_PICTURE']['SRC']))
    	                     $dat['image'] = $protocol . $_SERVER['SERVER_NAME'] . $arResult['PREVIEW_PICTURE']['SRC'];
    	                 else if (!empty($arResult['DETAIL_PICTURE']['SRC']))
    	                     $dat['image'] = $protocol . $_SERVER['SERVER_NAME'] . $arResult['DETAIL_PICTURE']['SRC'];
    	                 if (!empty($arResult['PROPERTIES']['rating']) && !empty($arResult['PROPERTIES']['rating']['VALUE'])) {
    	                     if (!isset($dat['aggregateRating']))
    	                         $dat['aggregateRating']['@type'] = 'AggregateRating';
    	                     (!empty($arResult['PROPERTIES']['rating']['NAME']) ? $dat['aggregateRating']['name'] = $arResult['PROPERTIES']['rating']['NAME'] : "");
    	                     (!empty($arResult['PROPERTIES']['rating']['VALUE']) ? $dat['aggregateRating']['ratingValue'] = $arResult['PROPERTIES']['rating']['VALUE'] : "");
    	                     (!empty($arResult['PROPERTIES']['vote_count']['VALUE']) ? $dat['aggregateRating']['ratingCount'] = $arResult['PROPERTIES']['vote_count']['VALUE'] : "");
    	                 }
    	                 if (!empty($arResult['OFFERS']) && !empty($OFFER['ITEM_PRICES'][0]['PRICE']))
    	                 {
    	                     if (!isset($dat['offers']))
    	                         $dat['offers'][0]['@type'] = "Offers";
    	                     foreach ($arResult['OFFERS'] as $keyOf => $OFFER)
    	                     {
    	                         (!empty($OFFER['NAME']) ? $dat['offers'][$keyOf]['name'] = $OFFER['NAME'] : "");
    	                         ($OFFER['PRODUCT']['AVAILABLE'] == 'Y' ? $dat['offers'][$keyOf]['availability'] = "InStock" : "");
    	                         (!empty($OFFER['ITEM_PRICES'][0]['PRICE']) ? $dat['offers'][$keyOf]['price'] = $OFFER['ITEM_PRICES'][0]['PRICE'] : "");
    	                         (!empty($OFFER['ITEM_PRICES'][0]['CURRENCY']) ? $dat['offers'][$keyOf]['priceCurrency'] = $OFFER['ITEM_PRICES'][0]['CURRENCY'] : "");
    	                         (!empty($arResult['DETAIL_PAGE_URL']) ? $dat['offers'][$keyOf]['url'] = $protocol . $_SERVER['SERVER_NAME'] . $arResult['DETAIL_PAGE_URL'] : "");
    	                     }
    	                 }
    	                 if (is_array($arResult['BRAND']) && !empty($arResult['BRAND']))
    	                 {
    	                     if (!isset($dat['brand']))
    	                         $dat['brand']['@type'] = "Brand";
    	                     foreach ($arResult['BRAND'] as $key => $brand)
    	                     {
    	                         (!empty($brand['NAME']) ? $dat['brand']['name'] = $brand['NAME'] : "");
    	                         (!empty($brand['SRC']) ? $dat['brand']['image'] = $protocol . $_SERVER['SERVER_NAME'] . $brand['SRC'] : "");
    	                         (!empty($brand['URL']) ? $dat['brand']['url'] = $protocol . $_SERVER['SERVER_NAME'] . $brand['URL'] : "");
    	                         break;
    	                     }
    	                 }
    	                 SchemaMain::setData($data);
    	             }
    	         }
    	     }
    	 }
    	 ?>
    

    В таком виде код обработчика автоматически подставляет данные, собранные с детальной страницы товара, в сущность «Product» для дальнейшего их добавления в скрипт json+ld.

Важно!

Выделенные строки обязательны для каждой сущности.

Строки №2-5 обязательны для получения доступа к правилам Schema.org.

Строка №60 - для сохранения изменений.


Нужна помощь в настройке решения

Оставьте заявку и мы свяжемся с вами!