Magento中的开放图问题
-
12-12-2019 - |
题
在Magento中创建Open Graph扩展时,我遇到了一个问题-尽管我的metatag是正确的,但facebook无法捕获我的og标签,因为我的meta/og标签之前有太多代码。
有没有其他人遇到过这个,你有什么建议?
<reference name="head">
<block type="catalog/product_view" name="product.opengraph">
<action method="setTemplate">
<template>socialtag/opengraph_product.phtml</template>
</action>
</block>
</reference>
解决方案
这是一个替代解决方案。这不好,应该被认为是一个黑客。它还违背了Magento的布局系统的目的。尽管如此,如果您的要求不覆盖基本头模板,则尝试:
通过事件观察者注入内容
在Module Config XML中,添加以下事件:
.
...
<global>
...
<events>
<http_response_send_before>
<observers>
<head_modify>
<type>singleton</type>
<class>Namespace_Module_Model_Observer</class>
<method>injectOgTags</method>
</head_modify>
</observers>
</http_response_send_before>
</events>
...
</global>
...
然后您将创建观察者类以匹配:
.
<?php
class Namespace_Module_Model_Observer
extends Varien_Event_Observer
{
public function injectOgTags(Varien_Object $object)
{
$response = $object->getResponse();
$html = $response->getBody();
// Some logic for building up the appropriate meta tags
// based on URL or product or layout handles
$html = str_replace('<head>', '<head><meta property="og:title" content="Page title" />', $html);
$response->setBody($html);
}
}
据我所知,这只是解决你的问题的唯一方法。股票头部块也不是其基本模板,为子HTML的呼叫添加了上方添加了
meta
标记的规定。 其他提示
我不确定到底是什么在头部渲染,推动你的元标签到目前为止,我也没有看到这是一个问题(除了"经验法则",它说将元标签尽可能高地放置在 HEAD
).
无论如何,你可以试试这个:
<reference name="head">
<block type="catalog/product_view" name="product.opengraph" before="-">
<action method="setTemplate">
<template>socialtag/opengraph_product.phtml</template>
</action>
</block>
</reference>
注意 before="-"
属性。这将在块生成期间被拾取(参见 Mage_Core_Model_Layout::_generateBlock
)并插入在父块堆栈的顶部(参见 Mage_Core_Block_Abstract::insert
).
不幸的是,这本身并不能解决您的问题,因为stock Magento head模板不会以排序顺序呈现其子项。所以你将不得不自己复盖这个模板并强制排序标志。
为此,请通过布局XML更改head模板:
<reference name="head">
<action method="setTemplate">
<template>your/module/head.phtml</template>
</action>
</reference>
并在该模板中呈现您的子HTML,如下所示:
<?php echo $this->getChildHtml('', true, true) ?>
其中第三个参数是排序标志,它告诉块根据您的托管顺序呈现其子级。这将让你的块在顶部。
另外,因为你必须经历所有这些麻烦才能扩展head模板,所以你可能还想在模板顶部(在你的CSS/JS上方)将子渲染向上碰撞。
奖金:
你为什么要利用 catalog/product_view
街区?请参阅此扩展以获取一个很好的样板,以便将您的代码与: https://github.com/thaddeusmt/magento-fb-opengraph/ --它们的实施涵盖了不仅仅是产品的OG标签。