Pregunta

Estoy usando Magento EE 1.6

Cuando uso una clase de bloque personalizada para mostrar algunas etiquetas dentro de mi <head>, el bloque no se mostrará.Pero si uso el "page/html" tipo, todo está bien...Necesito mi clase personalizada para agregar algunas funciones al bloque (activación, obtención de la URL de la imagen, etc.).

Por favor ayúdame a entender lo que me perdí.Esto es lo que he hecho hasta ahora:

aplicación/etc/modules/Wbx_Social.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Wbx_Social>
            <active>true</active>
            <codePool>local</codePool>
        </Wbx_Social>
    </modules>
</config>

aplicación/código/local/Wbx/Social/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Wbx_Social>
            <version>0.1.0</version>
        </Wbx_Social>
    </modules>
    <global>
        [...]
        <blocks>
            <wbx_social>
                <class>Wbx_Social_Block</class>
            </wbx_social>
        </blocks>
    </global>
    <frontend>
        <layout>
            <updates>
                <wbx_social>
                    <file>wbx_social.xml</file>
                </wbx_social>
            </updates>
        </layout>
    </frontend>
</config>

aplicación/código/local/Wbx/Social/Block/Opengraph.php:

class Wbx_Social_Block_Opengraph extends Mage_Core_Block_Template
{
    /**
     * @return int
     */
    public function isActive()
    {
        return true; // Will be replaced with store config value
    }

    /* And other useful functions */

}

aplicación/diseño/frontend/responsive/default/layout/wbx_social.xml:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="head">
            <block type="wbx_social/opengraph" name="opengraph" as="opengraph" template="social/opengraph.phtml"/>
        </reference>
    </default>
</layout>

Y finalmente la plantilla:aplicación/design/frontend/responsive/default/template/social/opengraph.phtml:

<?php /* @var $this Wbx_Social_Block_Opengraph */ ?>
<?php if ($this->isActive()) : ?>
    <meta property="fb:app_id"       content="an id"/>
    <meta property="og:type"         content="website"/>
    <meta property="og:site_name"    content="a name"/>
<?php endif; ?>

Por si acaso, no me olvidé del Wbx_Social_Helper_Data ayudante vacío.

En wbx_social.xml, cuando intento cambiar la clase de bloque para type="core/template" o type="page/html" (por ejemplo), el bloque se muestra correctamente (sin ningún acceso a funciones personalizadas, por supuesto)

Realmente necesito una pista, han pasado varias horas que estoy arrancando...

¿Fue útil?

Solución 2

Ok, descubrí el origen del problema.Efectivamente el problema era de mi bloque. Wbx_Social_Block_Opengraph que implementó un getUrl() método.Gran error ! Mage_Core_Block_Abstract (un antepasado de mi bloque) ya tiene un getUrl() método pero con una firma diferente.Mi verdadera gran pregunta es:¿Por qué diablos no recibí ningún error/advertencia?Habría ahorrado mucho tiempo...

De todos modos, cambié mi propio método para getOgUrl() y voilá !Mis etiquetas se muestran como quería....

¡Muchas gracias por sus sugerencias, amigos!

Otros consejos

Hay varios tipos de bloques en Magento.Ver aplicación\código\core\Mage\Core\Block\

Uno de ellos es "lista".Obtiene a todos los niños y los genera uno por uno.El content El bloque funciona así.

Pero la mayoría de los bloques tienen el tipo "plantilla".Significa que tienen algunas plantillas .phtml asociadas y las representan.Por ejemplo, su bloque tiene ese tipo.

Para agregar algún bloque en el encabezado ( type="template" ), debe editar el archivo head.phtml y llamar al bloque secundario usando $this->getChildHtml('opengraph')

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