Протокол 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.
Отладчик для проверки, удобен для отладки, тк. Фейсбук кеширует. ![]()