Как мога динамично да задавам мета тагове във facebook?

Имам сайт с opencart и се опитвам да конфигурирам опциите за споделяне във facebook на моите продукти.

Тъй като всичко се зарежда като отделен модул, не мога да задам мета таговете във facebook по този начин (header.tpl):

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

Тъй като $description не съществува, докато модулът header се зарежда. Създава се в контролера на модула product. Така че се опитах да променя динамично стойността на съдържанието (product.tpl):

$("meta[property='og:description']").attr('content','<?php echo $description; ?>');

И проработи, виждам, че стойността е променена (в изходния код на страницата), след което отстраних грешки страницата ми, но не можах да получа стойността.. Мисля, че знам причината, трябва да задам стойността преди зареждането на страницата, но не съм сигурен как мога да направя това.. Имате ли някаква идея?


person Selman Genç    schedule 04.08.2014    source източник
comment
Нашият робот не изпълнява Javascript. Така че не можете да ги промените с помощта на Javascript   -  person WizKid    schedule 04.08.2014
comment
За съжаление ще трябва да проверите в контролера на заглавката дали показваната страница е категория, продукт, информационна страница или производител и в тези случаи да заредите съответните им подробности, които след това ще бъдат попълнени в шаблона. В шаблона отново слушайте за променлива, представляваща такова състояние, за да изобразите FB метатаговете съответно. За съжаление трябва да се свърши малко работа.   -  person shadyyx    schedule 05.08.2014
comment
@shadyyx Мислех си същото, но се надявах, че има друг начин... изглежда, че няма.   -  person Selman Genç    schedule 05.08.2014
comment
Е, в момента проверявам метода controller::render() и мисля, че бихте могли да успеете да прехвърлите $this->data от render() в повикването getChild() - по този начин с малко усилия всички данни от основното съдържание могат да бъдат споделени между децата (горен колонтитул, долен колонтитул, колони, ...). След това трябва да можете просто да използвате тези променливи от основното съдържание, напр. в заглавката си, за да проверите дали присъстват и ако да, тогава изобразете FB метатаговете... Това би трябвало да изисква по-малко усилия при програмиране, но може да причини ненужно и нежелано увеличение на консумацията на памет (може би само малко).   -  person shadyyx    schedule 05.08.2014
comment
@shadyyx В крайна сметка намерих по-лесно решение, може да искате да погледнете :)   -  person Selman Genç    schedule 21.09.2014


Отговори (1)


Можете да използвате класа Document, за да ги добавите facebook тагове (колкото искате). Просто добавете два допълнителни метода setFacebookDescription и getFacebookDescription, така че трябва да добавите следното:

<?php
class Document {
    private $facebook_description;

    public function getFacebookDescription() {
        return $this->facebook_description;
    }

    public function setFacebookDescription($facebook_description) {
        $this->facebook_description = $facebook_description;
    }
}

На всеки контролер ще намерите в края на всеки метод извикване, което зарежда заглавката на Opencart, нещо като това $data['header'] = $this->load->controller('common/header'); (пример). Обърнете внимание, че може да се различава от вашия, зависи от версията на Opencart.

Сега в контролера header.php ти Добави:

<?php
class ControllerCommonHeader extends Controller {

    public function index() {
        $data['facebook_description'] = $this->document->getFacebookDescription();
    }
}

това ще получи променливата facebook_description и ще я предаде на изгледа header.tpl. След това добавете facebook таговете между вашите <head> тагове в header.tpl файл:

<!DOCTYPE html>
<head>
    <?php if ($facebook_description != '') { ?><meta property="og:description" content="<?php echo $facebook_description; ?>" /><?php } ?>
</head>

И накрая, можете да зададете facebook_description във всеки контролер, като извикате $this->document->setFacebookDescription('my description');.

Пример: в product.php контролер ти Добави

<?php
class ControllerProductProduct extends Controller {

    public function index() {

        // code...
        $this->document->setTitle($product_info['meta_title']);
        $this->document->setDescription($product_info['meta_description']);

        $this->document->setFacebookDescription($product_info['meta_description']);

        // the rest of the code...
    }
}

тук задавате $product_info['meta_description'] като маркер за описание на facebook, но можете също да използвате $product_info['name'] или друга променлива.

Последна бележка: можете да промените всички системни класове на Opencart с vqmod.

person machineaddict    schedule 06.08.2014
comment
благодаря за отделеното време и решението. това е добра идея, ще опитам това веднага щом мога. изглежда, че ще работи, също така може да се разшири за други мета тагове, както казахте... - person Selman Genç; 06.08.2014