Внедрение в макет разметки Open Graph

Стандарт 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((string) 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 товары, страницы, группы, информационные системы

    10.02.2020 21:54:22
    dreel

    Без темы

    В документации сказано что надо в тег head добвавить код prefix=
    "og: http://ogp.me/ns#
    fb: http://ogp.me/ns/fb#
    product: http://ogp.me/ns/product#"
    С этим кодом фейсбук и телеграм не понимают разметку, после удаления всё работает.

    09.02.2021 20:02:08
    yus
    yus
  • Без темы

    Здравствуйте, в результате вышеуказанного кода всё работает. Но здесь:
    $aOpenGraph['og:title'] = $oEntity->name;
    в поле title у товаров выводится только название name, которое в случае нашего интернет-магазина неинформативно, главное у товара - артикул.
    Не подскажите как вывести вместо name свойство артикул или лучше артикул товара+название ?
    Спасибо.

    13.07.2017 16:31:52
    ymz-export
    ymz-export

    Без темы

    После
    $aOpenGraph['og:title'] = $oEntity->name;

    добавьте:
    if ($bShopItem && strlen($oEntity->marking))
    {
    $aOpenGraph['og:title'] .= ' (' . $oEntity->marking . ')';
    }

    08.08.2017 09:29:46
    hostcms
  • Без темы

    А для главной страницы? Логотип там и все такое.

    03.05.2017 07:02:39
    hell0men
    hell0men
  • Без темы

    тип website
    title - из seo, а если не указано - из имени узла структуры
    description - из seo
    image - наверное из доп.свойства структуры...

    тот же принцип и для "Документы и страницы"

    13.02.2017 11:48:46
    EZ-Web
  • Без темы

    тут только для элементов инфосистемы и товаров...
    но ведь это же не всё, что может быть на сайте?
    - а как же группы?
    - а как же динамические страницы?
    - а как же документы и страницы?

    13.02.2017 11:33:05
    EZ-Web

    Без темы

    Хмм, какой Open Graph для неких динамических страниц?

    13.02.2017 11:35:02
    hostcms