Pergunta

Estou usando Magento EE 1.6

Quando uso uma classe de bloco personalizada para exibir algumas tags dentro do meu <head>, o bloco não será exibido.Mas se eu usar o "page/html" tipo, está tudo bem...Preciso que minha classe personalizada adicione alguns recursos ao bloco (ativação, obtenção de URL de imagem, etc.).

Por favor, ajude-me a entender o que perdi.Aqui está o que fiz até agora:

app/etc/modules/Wbx_Social.xml :

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

app/code/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>

app/code/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 */

}

app/design/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>

E finalmente o modelo:app/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 precaução, não esqueci o Wbx_Social_Helper_Data ajudante vazio.

Em wbx_social.xml, quando tento alterar a classe do bloco para type="core/template" ou type="page/html" (por exemplo), o bloco é exibido corretamente (sem qualquer acesso às funções personalizadas, é claro)

Eu realmente preciso de uma dica, já faz várias horas que estou arrancando...

Foi útil?

Solução 2

Ok, descobri a origem do problema.O problema era mesmo do meu bloco Wbx_Social_Block_Opengraph que implementou um getUrl() método.Grande erro ! Mage_Core_Block_Abstract (um ancestral do meu bloco) já tem um getUrl() método, mas com uma assinatura diferente.Minha verdadeira grande questão é:por que diabos não recebi nenhum erro/aviso ??Teria economizado muito tempo...

De qualquer forma, mudei meu próprio método para getOgUrl() e VOILÁ!Minhas tags são exibidas como eu queria....

Muito obrigado pelas sugestões, pessoal!

Outras dicas

Existem vários tipos de blocos no Magento.Veja app\code\core\Mage\Core\Block\

Um deles é "lista".Ele pega todos os filhos e os exibe um por um.O content bloco funciona assim.

Mas a maioria dos blocos possui o tipo "template".Isso significa que eles têm alguns modelos .phtml associados e os renderizam.Por exemplo, seu bloco possui esse tipo.

Para adicionar algum bloco no head ( type="template" ), você deve editar o arquivo head.phtml e chamar o bloco filho usando $this->getChildHtml('opengraph')

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top