Open Graph (расширенный код)

#
Open Graph (расширенный код)
Код для вставки в <head>. Элементы, товары, группы ИМ, группы ИС, остальные страницы (через структуру). Спасибо поддержке


<?php
$bOpenGraph = FALSE;

// 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)
        {
   $bOpenGraph = TRUE;
         
            $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'
      : 'product';
            
            $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();
                              $aOpenGraph['og:image:width'] = $oEntity->image_large_width;
                              $aOpenGraph['og:image:height'] = $oEntity->image_large_height;
                }
               
               if ($bShopItem)
               {
                  $aOpenGraph['product:price:amount'] = $oEntity->price;
                  $aOpenGraph['product:price:currency'] = $oEntity->shop_currency->code;
               }
                     
            }
            
            foreach ($aOpenGraph as $sProperty => $sContent)
            {
         ?><meta property="<?php echo htmlspecialchars($sProperty)?>" content="<?php echo htmlspecialchars($sContent)?>" /><?php
      
         echo PHP_EOL;
            }
      }
      elseif (Core_Page::instance()->object->group)
      {
         $bOpenGraph = TRUE;

            $aOpenGraph = array();
            
            $oEntity = $bInformationItem
                ? Core_Entity::factory('Informationsystem_Group', Core_Page::instance()->object->group)
                : Core_Entity::factory('Shop_Group', Core_Page::instance()->object->group);
            
            $type = $bInformationItem
                ? 'website'
      : 'website';
            
            $aOpenGraph['og:type'] = $type;
            $aOpenGraph['og:title'] = $oEntity->name;
            $aOpenGraph['og:description'] = $oEntity->seo_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();
            
                $aOpenGraph['og:image'] = 'путь к лого';
                
                     
            }
            
            foreach ($aOpenGraph as $sProperty => $sContent)
            {
         ?><meta property="<?php echo htmlspecialchars($sProperty)?>" content="<?php echo htmlspecialchars($sContent)?>" /><?php
      
         echo PHP_EOL;
         }
      }
   }
}
   
if (!$bOpenGraph && Core_Page::instance()->structure)
{
   $aOpenGraph = array();
   
   $oEntity = Core_Page::instance()->structure;
   
   $type = 'website';
   
   $aOpenGraph['og:type'] = $type;
   $aOpenGraph['og:title'] = $oEntity->Site->name;
   $aOpenGraph['og:description'] = strip_tags(Core_Str::cutSentences($oEntity->seo_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
         . $oEntity->getPath();
   
     $aOpenGraph['og:image'] = 'путь к лого';
               
   }
   
   foreach ($aOpenGraph as $sProperty => $sContent)
   {
      ?><meta property="<?php echo htmlspecialchars($sProperty)?>" content="<?php echo htmlspecialchars($sContent)?>" /><?php

      echo PHP_EOL;
   }
}

?>
#
Re: Open Graph (расширенный код)
Здравствуйте!
Не получается внедрить на hostcms разметку Open Graph.
Проверка выдает ошибки:
"Схема должна быть корректно установлена в свойствах тега <html lang="ru">
Например: <html prefix="og: http://ogp.me/ns#" ... >
Протокол Open Graph не инициализирован!  "

Ставлю этот код ( <html prefix="og: http://ogp.me/ns#" ... > сразу за <html lang="ru"> в главный шаблон сайта - ничего не меняется

Пробовал и более короткие варианты разметки, типа такого:
"<meta property="og:title" content="" />
        <meta property="ogescription" content="" />
        <meta property="og:site_name" content="" />
        <meta property="og:type" content="" />
        <meta property="og:url" content="" />
        <meta property="og:image" content="" />"

Тоже эффекта нет.

сайт евродом-урал.рф
Помогите пожалуйста.
Модератор
#
Re: Open Graph (расширенный код)
gkevrodom писал(а):
сразу за
почему это, у вас один <html> должен быть, а не два, как вы делаете, укажите существующему префикс.
#
Re: Open Graph (расширенный код)
да, теперь видит, что схема на сайте внедрена, но не видит никаких данных из вставленного в раздел head кода....
Модератор
#
Re: Open Graph (расширенный код)
gkevrodom,
открываете исходный код страницы, проверяете наличие данных и соответствие формату. Если данные есть и соответствуют стандарту, то вопросы к сервису проверки.
https://yandex.ru/support/webmaster/open-graph/intro-open-graph.html
#
Re: Open Graph (расширенный код)
спасибо
#
Re: Open Graph (расширенный код)
Валидатор на страницах товаров ругался на
ОШИБКА: префикс product неизвестен валидатору, укажите его явно атрибутом prefix

Нарыл на форумах, что нужно вместо <head> вставить
<head prefix=
    "og: http://ogp.me/ns#
     fb: http://ogp.me/ns/fb#  
     product: http://ogp.me/ns/product#">

Теперь не ругается.
https://www.beregusha.com https://www.coffemol.ru
#
Re: Open Graph (расширенный код)
Обновленный код вынесен в отдельный модуль - подключение одной строкой https://github.com/r3code/hostcms6-opengpaph (товары, группы, информационные системы, страницы/статьи). Типы og:type: website, article, product
#
Re: Open Graph (расширенный код)
Здравствуйте!

Сделал все по инструкции, установил код по инструкции от dreel
Прошу подсказать:
1) Как в коде указать размеры картинки для соцсетей? Для примера, в Вконтакте, картинки режутся наполовину по высоте.
2) Как задействовать код из инструкции для страниц сайта, не входящих интернет-магазин? В нем все нормально заработало (кроме размеров), на всех же других страницах сайта я вижу те же данные при вставке ссылки в соцсети, что и для главной страницы.
3) Ну, и, для всех страниц, где не меняется автоматически название - одна и та же картинка. Можно ли сделать, чтобы картинка не жестко была задана в коде, а подтягивалась из страницы?
#
Re: Open Graph (расширенный код)
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация