Inserindo tags Open Graph via módulo e bloco customizado
-
12-12-2019 - |
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...
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')