我有一个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我的页面但我无法获得值...我想我知道原因,我必须在页面加载之前设置值,但我不知道我该怎么做..你有什么想法吗?
答案 0 :(得分:3)
您可以使用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');
(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系统类。