Стандарт Open Graph разработан Facebook, предназначен для контроля превью, которое формируется при публикации ссылки на сайт в социальных сетях. Разметку Open Graph поддерживают Facebook, Google+, Вконтакте, Twitter, LinkedIn, Pinterest и др.
В секцию <head> основного макете внесите код, добавляющий разметку для информационных элементов и товаров:
<?php
// Open Graph
if (is_object(Core_Page::instance()->object))
{
$bInformationItem = Core_Page::instance()->object instanceof Informationsystem_Controller_Show;
$bShopItem = Core_Page::instance()->object instanceof Shop_Controller_Show;
if ($bInformationItem || $bShopItem)
{
if (Core_Page::instance()->object->item)
{
$aOpenGraph = array();
$oEntity = $bInformationItem
? Core_Entity::factory('Informationsystem_Item', Core_Page::instance()->object->item)
: Core_Entity::factory('Shop_Item', Core_Page::instance()->object->item);
$type = $bInformationItem
? 'article'
: 'website';
$aOpenGraph['og:type'] = $type;
$aOpenGraph['og:title'] = $oEntity->name;
$aOpenGraph['og:description'] = strip_tags(Core_Str::cutSentences($oEntity->description));
$oSite = Core_Entity::factory('Site', CURRENT_SITE);
$oSite_Alias = $oSite->getCurrentAlias();
if ($oSite_Alias)
{
$sSiteURL = $oSite_Alias->name;
$protocol = Core_Page::instance()->structure->https
? 'https://'
: 'http://';
$aOpenGraph['og:url'] = $protocol . $sSiteURL
. Core_Page::instance()->structure->getPath()
. $oEntity->getPath();
if ($oEntity->image_large != '')
{
$aOpenGraph['og:image'] = $protocol . $sSiteURL . $oEntity->getLargeFileHref();
}
}
foreach ($aOpenGraph as $sProperty => $sContent)
{
?><meta property="<?php echo htmlspecialchars($sProperty)?>" content="<?php echo htmlspecialchars($sContent)?>" /><?php
echo PHP_EOL;
}
}
}
}
?>
Расширенная версия разметки: https://www.hostcms.ru/forums/3/12308/
Обновленный код https://github.com/r3code/hostcms6-opengpaph товары, страницы, группы, информационные системы
В документации сказано что надо в тег head добвавить код prefix=
"og: http://ogp.me/ns#
fb: http://ogp.me/ns/fb#
product: http://ogp.me/ns/product#"
С этим кодом фейсбук и телеграм не понимают разметку, после удаления всё работает.
Здравствуйте, в результате вышеуказанного кода всё работает. Но здесь:
$aOpenGraph['og:title'] = $oEntity->name;
в поле title у товаров выводится только название name, которое в случае нашего интернет-магазина неинформативно, главное у товара - артикул.
Не подскажите как вывести вместо name свойство артикул или лучше артикул товара+название ?
Спасибо.
После
$aOpenGraph['og:title'] = $oEntity->name;
добавьте:
if ($bShopItem && strlen($oEntity->marking))
{
$aOpenGraph['og:title'] .= ' (' . $oEntity->marking . ')';
}
тип website
title - из seo, а если не указано - из имени узла структуры
description - из seo
image - наверное из доп.свойства структуры...
тот же принцип и для "Документы и страницы"
тут только для элементов инфосистемы и товаров...
но ведь это же не всё, что может быть на сайте?
- а как же группы?
- а как же динамические страницы?
- а как же документы и страницы?