Pregunta

Mientras creaba la extensión Open Graph en Magento, me encontré con un problema: aunque mi metaetiqueta es correcta, Facebook no puede detectar mi etiqueta og porque hay demasiado código antes de mi etiqueta meta/og.

¿Alguien más ha encontrado esto y tiene alguna sugerencia?

<reference name="head">
    <block type="catalog/product_view" name="product.opengraph">
        <action method="setTemplate">
            <template>socialtag/opengraph_product.phtml</template>
        </action>
    </block>      
</reference>
¿Fue útil?

Solución

Aquí hay una solución alternativa.No es agradable y debería considerarse un truco.También va en contra de los propósitos del sistema de diseño de Magento.De todos modos, si su requisito no es anular la plantilla de encabezado base, entonces intente esto:

Inyectar contenido a través del observador de eventos

En el XML de configuración de su módulo, agregue el siguiente evento:

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

Y luego crearías una clase de observador que coincida:

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

}

Hasta donde puedo ver, esta es la única forma de resolver su problema.Ni el bloque principal original ni su plantilla base prevén la adición meta etiquetas encima de su llamada a HTML secundario.

Otros consejos

No estoy seguro de qué es exactamente lo que se representa en el encabezado que empuja las metaetiquetas tan hacia abajo, ni he visto que esto sea un problema (excepto la "regla general" que dice colocar las metaetiquetas lo más alto posible en el HEAD).

En cualquier caso, puedes probar esto:

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

Observe la before="-" atributo.Esto se recogerá durante la generación del bloque (ver Mage_Core_Model_Layout::_generateBlock) y se inserta en la parte superior de la pila del bloque principal (ver Mage_Core_Block_Abstract::insert).

Desafortunadamente, esto por sí solo no resolverá su problema, ya que la plantilla principal de Magento no muestra sus elementos secundarios en un orden ordenado.Por lo tanto, tendrá que anular esta plantilla usted mismo y forzar el indicador de clasificación.

Para hacer esto, cambie la plantilla del encabezado mediante el diseño XML:

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

Y en esa plantilla, represente el HTML de su hijo así:

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

Donde el tercer argumento es el indicador de clasificación que le indica al bloque que represente a sus elementos secundarios de acuerdo con el orden administrado.Esto hará que tu bloque esté en la parte superior.

Como nota al margen, debido a que tendrá que pasar por todos estos problemas de todos modos para extender la plantilla principal, es posible que también desee aumentar la representación secundaria cerca de la parte superior de la plantilla (arriba de su CSS/JS).


PRIMA:

¿Por qué estás aprovechando el catalog/product_view ¿bloquear?Consulte esta extensión para obtener un buen texto estándar con el que comparar su código: https://github.com/thaddeusmt/magento-fb-opengraph/ -- su implementación cubre etiquetas OG más allá de solo productos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top