Question

Lors de la création de l'extension Open Graph dans Magento, j'ai rencontré un problème : bien que ma balise méta soit correcte, Facebook ne peut pas détecter ma balise og car il y a trop de code avant ma balise méta/og.

Quelqu'un d'autre a-t-il rencontré cela et avez-vous des suggestions ?

<reference name="head">
    <block type="catalog/product_view" name="product.opengraph">
        <action method="setTemplate">
            <template>socialtag/opengraph_product.phtml</template>
        </action>
    </block>      
</reference>
Était-ce utile?

La solution

Voici une solution alternative.Ce n'est pas sympa et devrait être considéré comme un hack.Cela va également à l’encontre des objectifs du système de mise en page de Magento.Néanmoins, si votre exigence n'est pas de remplacer le modèle d'en-tête de base, alors essayez ceci :

Injecter du contenu via Event Observer

Dans le XML de configuration de votre module, ajoutez l'événement suivant :

...
<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>
...

Et puis vous créeriez une classe d’observateur correspondant :

<?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);
    }

}

Autant que je sache, ce n'est qu'un moyen de résoudre votre problème.Ni le bloc de tête d'origine ni son modèle de base ne prévoient l'ajout de meta balises au-dessus de son appel pour le HTML enfant.

Autres conseils

Je ne suis pas sûr de ce qui est exactement le rendu dans la tête qui pousse vos balises méta si bas, et je n'ai pas non plus vu cela comme un problème (sauf la "règle empirique" qui dit de placer les balises méta aussi haut que possible dans le HEAD).

Dans tous les cas, tu peux essayer ceci :

<reference name="head">
    <block type="catalog/product_view" name="product.opengraph" before="-">
        <action method="setTemplate">
            <template>socialtag/opengraph_product.phtml</template>
        </action>
    </block>      
</reference>

Remarquez le before="-" attribut.Ceci sera récupéré lors de la génération du bloc (voir Mage_Core_Model_Layout::_generateBlock) et inséré en haut de la pile du bloc parent (voir Mage_Core_Block_Abstract::insert).

Malheureusement, cela ne résoudra pas à lui seul votre problème, car le modèle de tête Magento d'origine ne restitue pas ses enfants dans un ordre trié.Vous devrez donc remplacer ce modèle vous-même et forcer l'indicateur de tri.

Pour ce faire, modifiez le modèle d'en-tête via la mise en page XML :

<reference name="head">
    <action method="setTemplate">
        <template>your/module/head.phtml</template>
    </action>
</reference>

Et dans ce modèle, affichez le HTML de votre enfant comme ceci :

<?php echo $this->getChildHtml('', true, true) ?>

Où le troisième argument est l'indicateur de tri qui indique au bloc de restituer ses enfants selon votre ordre géré.Cela placera votre bloc en haut.

En passant, comme vous devrez de toute façon traverser tous ces problèmes pour étendre le modèle principal, vous souhaiterez peut-être également augmenter le rendu enfant vers le haut du modèle (au-dessus de votre CSS/JS).


PRIME:

Pourquoi exploitez-vous le catalog/product_view bloc?Consultez cette extension pour un bon passe-partout avec lequel comparer votre code : https://github.com/thaddeusmt/magento-fb-opengraph/ -- leur implémentation couvre les balises OG au-delà des seuls produits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top