質問

MagentoでOpen Graph拡張機能を作成しているときに問題が発生しました-メタタグは正しいですが、facebookはメタ/ogタグの前にコードが多すぎるため、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のレイアウトシステムの目的にも対抗しています。それにもかかわらず、あなたの要件がベースヘッドテンプレートを上書きしない場合は、これを試してください:

イベントオブザーバを介してコンテンツを注入する

モジュール設定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);
    }

}
.


私が見ることができる限り、これはあなたの問題を解決するための唯一の方法です。Stock Head Blockもその基本テンプレートも、子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) ?>

ここで、3番目の引数は、管理された順序に従って子をレンダリングするようにブロックに指示するソートフラグです。これはあなたのブロックを一番上に取得します。

サイドノートでは、headテンプレートを拡張するには、とにかくこの問題のすべてを通過する必要があるため、テンプレートの上部(CSS/JSの上)の近くで子レンダリ


ボーナス:

なぜあなたは活用しているのですか catalog/product_view ブロック?あなたのコードを比較するための良い定型文については、この拡張機能を参照してください: https://github.com/thaddeusmt/magento-fb-opengraph/ --その実装は、単に製品を超えてOGタグをカバーしています。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top