如何动态设置facebook元标记?

时间:2014-08-04 17:18:12

标签: php jquery facebook opencart

我有一个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; ?>');

它有效,我可以看到值已更改(在页面源中),然后我debugged我的页面但我无法获得值...我想我知道原因,我必须在页面加载之前设置值,但我不知道我该怎么做..你有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用Document类添加这些Facebook标记(尽可能多)。只需添加两个额外的方法setFacebookDescriptiongetFacebookDescription,因此您必须添加以下内容:

<?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');example)。请注意,它可能与您的不同,它取决于Opencart版本。

现在,在header.php控制器中添加:

<?php
class ControllerCommonHeader extends Controller {

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

这将获取facebook_description变量并将其传递给视图header.tpl。接下来,在<head>文件中的header.tpl标记之间添加facebook标记:

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

最后,您可以通过调用$this->document->setFacebookDescription('my description');来设置每个控制器中的facebook_description。

示例:在product.php controller中添加

<?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']或其他变量。

最后注意事项:您可以使用vqmod更改所有Opencart系统类。