Opencart - добавление тегов Open Graph (meta property og)

Добавление метатегов для социальных сетей (Opencart - добавление meta property og) в <head> CMS Opencart (название - og:title, описание - og:description, изображение - og:image и ссылки - og:url).

Для начала добавим og:title и og:description - самое простое, достаточно внести изменения в header.tpl шаблона, используя текущие title и description. 

Откроем /catalog/view/theme/ВАШ_ШАБЛОН/template/common/header.tpl и добавим два этих тега. 

Находим:

<?php if ($description) { ?>
 <meta name="description" content=" <?php echo $description; ?>" />
 <?php } ?>

И добавим сюда:

 <meta property="og:description" content=" <?php echo $description; ?>" />

Получим:

<?php if ($description) { ?>
 <meta name="description" content=" <?php echo $description; ?>" />
 <meta property="og:description" content=" <?php echo $description; ?>" />
 <?php } ?>

Теперь аналогично для title, находим:

<title><?php echo $title; ?></title>

И после добавляем:

<meta property="og:title" content="<?php echo $title; ?>" />

Дальше перейдем к добавлению двух других тегов - изображение и ссылка. 

Кроме header.tpl, изменения в который будут внесены позже, необходимо так же изменить другие файлы:

Начнем с /system/library/document.php

Сразу после

private $keywords;

Добавим

private $ogimage;	
private $ogurl;

Затем после

public function getKeywords() {
return $this->keywords;
}

Добавим

public function setOgimage($ogimage) {
$this->ogimage = $ogimage;
}
public function getOgimage() {
return $this->ogimage;
}
public function setOgurl($ogurl) {
$this->ogurl = $ogurl;
}
public function getOgurl() {
return $this->ogurl;
}

Теперь перейдем к файлу  /catalog/controller/common/header.php и здесь нужно найти:

Для Opencart 1.5

$this->data['keywords'] = $this->document->getKeywords();

Сразу после добавляем:

$this->data['ogimage'] = $this->document->getOgimage();
$this->data['ogurl'] = $this->document->getOgurl();

Для Opencart 2 - находим:

$data['keywords'] = $this->document->getKeywords();

Сразу после добавляем:

$data['ogimage'] = $this->document->getOgimage();
$data['ogurl'] = $this->document->getOgurl();

Далее осталось вывести это в шаблон header - /catalog/view/theme/ВАШ_ШАБЛОН/template/common/header.tpl:

После

<?php if ($keywords) { ?>
<meta name="keywords" content="<?php echo $keywords; ?>" />
<?php } ?>

Добавим

<?php if ($ogimage) { ?>
 <meta property="og:image" content="<?php echo $ogimage; ?>" />
 <?php } ?>
 <?php if ($ogurl) { ?>
 <meta property="og:url" content="<?php echo $ogurl; ?>" />
 <?php } ?>

На этом основная часть сделана, теперь можно добавлять присвоение данных тегов в нужные контроллеры. Далее на примере контроллера товара. Здесь в качестве ссылки возьму урл canonical (не вижу смысла в передаче данных с неканонических страниц), а в качестве изображения - основное изображение товара.

После

$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');

Добавим

$this->document->setOgurl($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']));

Для opencart 1.5 - после:

$this->data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));

Для Opencart 2 - после:

$data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));

Добавим

$this->document->setOgimage($this->model_tool_image->resize($product_info['image'], 500, 300));

Здесь - 500 - ширина изображения в пикселях, 300 - ширина. Так же можно использовать изменение размера в соответствие с конфигом, здесь намеренно указал размеры..

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

Комментарии (30)

  1. Роман 28 марта 2016, 17:26
    0 #

    Здравствуйте! А может подскажете куда именно и как правильно в контроллере для category.php вставить $this->document->setOgurl($this->url->link('product/product', 'product_id='. $this->request->get['product_id']));

    и строку для image
    $this->document->setOgimage($this->model_tool_image->resize($product_info['image'], 500, 300));

    1. Владимир 29 марта 2016, 17:11
      0 #

      Зависит от версии опенкарта. В последней, на данный момент, уже есть вывод canonical в head, соответственно находим:

      $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], true), 'canonical');
      И ниже добавляем:
      $this->document->setOgurl($this->url->link('product/category', 'path=' . $category_info['category_id'], true));
      Если версия более старая и canonical нет, то можно сделать по примеру последнего урла в хлебных крошках.
      Пример для 1.5.6 — Ogurl и Ogimage. находим:
      if ($category_info['image']) {
      				$this->data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
      $this->document->setOgimage($this->model_tool_image->resize($category_info['image'], 500, 300));
      			} else {
      				$this->data['thumb'] = '';
      			}
      Добавляем урл, изображение. Получится так:
      $this->document->setOgurl($this->url->link('product/category', 'path=' . $this->request->get['path']));
      			if ($category_info['image']) {
      				$this->data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
      
      			} else {
      				$this->data['thumb'] = '';
      			}

      1. Роман 30 марта 2016, 12:32(Комментарий был изменён)
        0 #

        Спасибо! Помогло но частично. Мета тег в хеде появляется только на первой странице категории, а у нас категории разделены на страницы. На второй, третьей, и т. д. уже тега нет. Подскажите как это можно поправить.

        Вот часть кода category.php

        $data['pagination'] = $pagination->render();

        $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total)? (($page — 1) * $limit) + 1: 0, ((($page — 1) * $limit) > ($product_total — $limit))? $product_total: ((($page — 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));

        if ($page == 1) {
        $this->document->addLink($this->url->link('product/category', 'path='. $category_info['category_id'], 'SSL'), 'canonical');
        } elseif ($page == 2) {
        $this->document->addLink($this->url->link('product/category', 'path='. $category_info['category_id'], 'SSL'), 'prev');
        } else {
        $this->document->addLink($this->url->link('product/category', 'path='. $category_info['category_id']. '&page='. ($page — 1), 'SSL'), 'prev');
        }

        if ($limit && ceil($product_total / $limit) > $page) {
        $this->document->addLink($this->url->link('product/category', 'path='. $category_info['category_id']. '&page='. ($page + 1), 'SSL'), 'next');
        }

        1. Владимир 30 марта 2016, 13:04
          0 #

          Тогда можно как и для 1.5 сделать, но ссылка всегда будет вести на первую страницу.

    2. Артур 30 августа 2015, 18:55
      0 #

      Для товара тоже самое.
      Что я делаю не так?)

      1. Вова Ленский 30 августа 2015, 21:38
        0 #

        Для категории в примере не делал, а для товара должно быть… пришлите свои файлы:
        header.tpl, /system/library/document.php, /catalog/controller/common/header.php, /catalog/controller/product/product.php, /catalog/controller/product/category.php на vl@onenv.ru — посмотрю… надеюсь во все эти файлы изменения вносили?

        1. Bogdan 21 февраля 2016, 09:46
          0 #

          Подскажите, пожалуйста, что не так! Как я понимаю, ошибка в файле header.tpl

          В Шапке сайта выкидывает: Notice: Undefined variable: og_url in /home/l/linetr/localblog/public_html/catalog/view/theme/default2/template/common/header.tpl on line 93

          1. Владимир 21 февраля 2016, 10:43(Комментарий был изменён)
            0 #

            Проверьте есть ли такая переменная в контроллере хедера. В общем то первое что нужно сделать. Посмотрите как сделано в примере на этой странице (я использовал другое имя, видимо еще где то брали пример). В шаблоне есть: echo $ogurl;, а в контроллере — $data['ogurl'] = $this->document->getOgurl(); (в зависимости от версии опенкарта — или $data['ogurl'] для двойки, или $this->data['ogurl'] для 1,5, это так же проверьте)

            1. Bogdan 24 февраля 2016, 12:19
              0 #

              Спасибо за ответ! Буду пробовать!

      2. Артур 30 августа 2015, 18:53
        0 #

        Почему то не формируется og:image в категории.
        Картинка для категории задана.
        Что можно сделать?

        1. Azad 22 февраля 2016, 16:51
          0 #

          ...catalog\controller\product\category.php

          if ($category_info['image']) {
          $data['popup'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));
          $this->document->setOgimage($this->model_tool_image->resize($category_info['image'], 500, 300));
          } else {
          $data['popup'] = '';
          }

        2. Vanea 20 августа 2015, 06:26
          +1 #

          Kak ispraviti oshibku???

          1. Вова Ленский 20 августа 2015, 07:24
            0 #

            Напишите, какие ошибки и какая версия Opencart

            1. Вова Ленский 20 августа 2015, 07:42
              0 #

              Нашел ошибку. В /system/library/document.php забыл добавить:

              public function setOgimage($ogimage) {
              $this->ogimage = $ogimage;
              }

              исправил, так же добавил изменения для второй версии

              1. Vanea 20 августа 2015, 08:00
                0 #

                versia 1.5.6.4

                1. Вова Ленский 20 августа 2015, 08:02
                  0 #

                  попробуйте сейчас, после исправлений — должно работать

                  1. Vanea 20 августа 2015, 08:05
                    0 #

                    u menia do atovo site vopshe ne rabotal, belaya strinita

                    1. Вова Ленский 20 августа 2015, 08:06
                      0 #

                      да, все верно

                      1. Vanea 20 августа 2015, 08:07
                        0 #

                        poprobuiu ishio raz

                        1. Vanea 20 августа 2015, 08:26
                          0 #

                          zdelal no na necatorie tovari ne rabotaet
                          i s foto toje nerabotaet

                          1. Vanea 20 августа 2015, 08:30
                            0 #

                            na necatorie tovari pokazivaet foto, a na drugie ne pacazivat foto, i daje url drugoi

                            1. Вова Ленский 20 августа 2015, 09:27
                              0 #

                              Проверьте контроллер товара… возможно там ошибка… или мне пришлите на vl@onenv.ru — посмотрю… проверял на одном из сайтов — все нормально. Если все правильно настроено, то URL — это каноникал страницы (в опенкарте он от корня сайта), а изображение — основное изображение товара… так что или ошиблись где то при добавлении, или с сайтом проблемы.

                              1. Vanea 20 августа 2015, 10:02
                                0 #

                                u menea bili whitespace na foto

                                1. Vanea 20 августа 2015, 10:05
                                  0 #

                                  s facebook ishio necotarie oshibki

                                  Your page has meta tags in the body instead of the head. This may be because your HTML was malformed and they fell lower in the parse tree.
                                  Please fix this in order for the tags to be usable.

                                  ata pishet kokda ia proveriaiu na site developers.facebook.com/tools/debug/og/object/

                                  1. Vanea 20 августа 2015, 10:05
                                    0 #

                                    ne znaite kak ispraviti atu oshibku?

                                    1. Вова Ленский 20 августа 2015, 10:40(Комментарий был изменён)
                                      0 #

                                      А вот здесь уже нужно смотреть верстку сайта… и разумеется исправлять. Ошибка вероятнее всего в самом блоке head, соответственно правка файла header.tpl. Проверьте все теги, кавычки на открытие/закрытие

                    2. Василий 11 мая 2015, 18:02
                      0 #

                      ВСЁ СДЕЛАЛ КАК НАПИСАНО И ПОЛУЧИЛ получил Fatal error: Cannot redeclare Document::getOgimage() in /home/system/library/document.php on line 54

                      1. Владимир 11 мая 2015, 21:08
                        0 #

                        если все так, подобной ошибки быть не должно. а какая версия opencart используется? можете отправить файл /home/system/library/document.php? или просто проверьте что не так в 54 строке (там все записи аналогичны)

                      2. Василий 11 мая 2015, 17:19
                        0 #

                        "На этом основная часть сделана, теперь можно добавлять присвоение данных тегов в нужные контроллеры." в какие контроллеры именно добовлять?

                        1. Владимир 11 мая 2015, 21:06
                          0 #

                          к примеру, контроллер товаров - catalog/controller/product/product.php, категории - catalog/controller/product/category.php