在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标签。

许可以下: CC-BY-SA归因
scroll top