Протокол Open Graph контролирует анонс, который формируется при добавлении ссылки в социальные сети(Вконтакте, Facebook). С помощью мета тегов ему можно задавать картинки, заголовки, и описание и другие параметры.

Задача: Требуется установить на сайт протокол Open Graph, сайт написан на CMS Bitrix, настроить, так что бы корректно подгружались данные по детальной карточки товара, по категориям товара и главную страницу.

Подключение Open Graph для детальной карточки товаров. Для подключения протокола, требуется в шаблоне компоненты catalog.element.incatalog создать несколько файлов, во первых result_modifier.php. Указываем список ключей массива $arResult,которые должны будут закешироваться. Для доступа к данным массива в файле component_epilog.php.

$this->__component->SetResultCacheKeys(array(
   "NAME",
   "PREVIEW_TEXT",
   "PREVIEW_PICTURE"
));

Во вторых component_epilog.php и указать в нем следующие данные:

<?/**
* OpenGrap
*/
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
use Bitrix\Main\Page\Asset;
if($arResult):

   Asset::getInstance()->addString('<meta property="og:title" content="'.$arResult['NAME'].'"/>');
   Asset::getInstance()->addString('<meta property="og:type" content="website"/>');
   Asset::getInstance()->addString('<meta property="og:image" content="http://www.mechta.kz'.$arResult['PROPERTIES']['PHOTO']['VALUE'][0].'"/>');
   Asset::getInstance()->addString('<meta property="og:image:width" content="968" />');
    Asset::getInstance()->addString('<meta property="og:image:height" content="504" />');
   Asset::getInstance()->addString('<meta property="og:site_name" content="'.GetMessage('F_MECHTA').'"/>');
   Asset::getInstance()->addString('<meta property="og:description" content="'.ucfirst($arResult['PREVIEW_TEXT']).'"/>');
endif?>

Подключение Open Graph для списка каталога товаров.

result_modifier.php

/**
 * OpenGrap
 */
$this->__component->SetResultCacheKeys(array(
   "NAME"
));

$cp = $this->__component; // объект компонента

if (is_object($cp))
{
   $cp->arResult['ITEMS'];
   $cp->SetResultCacheKeys(array('ITEMS'));
   // сохраним их в копии arResult, с которой работает шаблон
   $arResult['ITEMS'] = $cp->arResult['ITEMS'];
}

component_epilog.php

<?/**
 * OpenGrap
 */
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
use Bitrix\Main\Page\Asset;

if($arResult):
   Asset::getInstance()->addString('<meta property="og:title" content="'.$arResult['NAME'].'"/>');
   Asset::getInstance()->addString('<meta property="og:type" content="website"/>');

   foreach ($arResult['ITEMS'] as $key => $arItem){
      if($arItem['PROPERTIES']['PREVIEW']['VALUE'][0]){
         Asset::getInstance()->addString('<meta property="og:image" content="http://www.mechta.kz'.$arItem['PROPERTIES']['PREVIEW']['VALUE'][0].'" />');
         Asset::getInstance()->addString('<meta property="og:image:width" content="968" />');
         Asset::getInstance()->addString('<meta property="og:image:height" content="504" />');
      }
   }
   Asset::getInstance()->addString('<meta property="og:site_name" content="'.GetMessage('F_MECHTA').'"/>');
   Asset::getInstance()->addString('<meta property="og:description" content="'.$arResult['NAME'].'"/>');

endif?>

Подключение Open Graph для главной страницы. Загвоздка.. Пришлось закинуть в компоненту баннера главной страницы. Только component_epilog.php.

<?/**
* OpenGrap
*/
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
use Bitrix\Main\Page\Asset;
if($arResult):
   Asset::getInstance()->addString('<meta property="og:title" content="'.GetMessage('F_MECHTA').'"/>');
   Asset::getInstance()->addString('<meta property="og:type" content="website"/>');
   Asset::getInstance()->addString('<meta property="og:image" content="http://www.mechta.kz/tmpl/img/logoopeng201x201.jpg"/>');
   Asset::getInstance()->addString('<meta property="og:image:width" content="201" />');
   Asset::getInstance()->addString('<meta property="og:image:height" content="201" />');
   Asset::getInstance()->addString('<meta property="og:site_name" content="'.GetMessage('F_MECHTA').'"/>');
   Asset::getInstance()->addString('<meta property="og:description" content="'.GetMessage('F_MECHTA').'"/>');
   Asset::getInstance()->addString('<meta property="og:url" content= "http://www.mechta.kz"/>');
endif
?>

Картинки должны быть не меньше 200x200px.

Для отображения картинки на Facebook обязательны параметры метатега  height и width.

Картинка подходящего размера 968×504px, рекомендованнын Фейсбуком 1200×630px.

Отладчик для проверки, удобен для отладки, тк. Фейсбук кеширует. Отладчик объектов Open Graph

Добавить комментарий