Magento 1.9.x - Blocos não exibidos no módulo local
-
28-09-2020 - |
Pergunta
Estou criando um módulo para adicionar alguns botões extras de call to action.Não consigo exibir uma saída.Acredito que estou entendendo errado as convenções de nomenclatura ou o local do arquivo (ou ambos).
Também pode ser a forma como estou tentando inserir o bloco.Não quero modificar os arquivos phtml se puder evitá-lo.
Como você pode ver em meus arquivos, estou tentando várias maneiras de obter o qualquer coisa para ser produzido - sem sorte.
O objetivo é poder adicionar botões de CTA adicionais após Adicionar ao carrinho - como 'Solicitar amostras'
Estrutura do arquivo:
app
Code
local
CompanyName
CtaAttributes
Block -> CtaButtons.php
etc -> config.xml
design
frontend
base
default
layout->ctabuttons.xml
template
ctaattributes
catelog
product ->ctabuttons.phtml
config.xml
<config>
... includes Module and Resource
<global>
<blocks>
<ctaattributes>
<class>CompanyName_CtaAttributes_Block</class>
</ctaattributes>
</blocks>
</global>
</config>
CtaButtons.xml
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="content">
<block type="core/text_list" name="product.info.addtocart" before="addtocart" template="ctaattributes/catalog/product/ctabuttons.phtml"/>
<action method="append">
<block>ctabuttons</block>
</action>
</reference>
<reference name="product.info.addtocart">
<block type="core/text_list" name="core-text"><action method="setText"><text><![CDATA[<div>Test</div>]]></text></action></block>
</reference>
</catalog_product_view>
</layout>
ctabuttons.phtml
<?php
/**
*/
Mage::log(get_class($this));
echo 'this is my test';
CtaButtons.php
<?php
class CompanyName_CtaAttributes_Block_CtaButtons extends Mage_Core_Block_Template {
echo 'test';
}
Solução 4
Encontrei uma solução - ela está dividida em duas partes.
Não defini um caminho frontend->update para minha atualização de layout.Eu inseri isso depois
</global>
<frontend> <layout> <updates> <ctaattributes> <file>ctaattributes.xml</file> </ctaattributes> </updates> </layout> </frontend>
Se eu tivesse usado local.xml, não acredito que isso fosse necessário, mas em meus testes pensei em alterar o nome do arquivo para mantê-lo separado.
- Você não pode usar camel case no nome da classe de bloco
Originalmente minha aula era CompanyName_CtaAttributes_Block_CtaButtons
- com um arquivo correspondente chamado CtaButtons.php
.
Mudando o nome para CompanyName_CtaAttributes_Block_Ctabuttons
e Ctabuttons.php
resolveu o problema.
Não sei se é o arquivo Class em Block/Blockname.php ou o arquivo xml de layout que está com problema.
Eu testei isso com CamelCase no nome da empresa e no módulo sem nenhum impacto, parece estar restrito à classe e arquivo Blockname.
Outras dicas
- O /blocks/ctabuttons.xml na estrutura do arquivo deve ser um arquivo php.
- Não vejo o arquivo do módulo que deveria estar em /app/etc/modules
- Você deve ter o módulo Versioning no config.xml
Se você usar o patch mais recente, seus blocos também deverão ser permitidos em Sistema->Permissão->bloco
Olá, você precisa definir o tipo de bloco primeiro
De
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="content">
<block type="core/text_list" name="product.info.addtocart" before="addtocart" template="ctaattributes/catalog/product/ctabuttons.phtml"/>
<action method="append">
<block>ctabuttons</block>
</action>
</reference>
<reference name="product.info.addtocart">
<block type="core/text_list" name="core-text"><action method="setText"><text><![CDATA[<div>Test</div>]]></text></action></block>
</reference>
</catalog_product_view>
</layout>
Para
<?xml version="1.0"?>
<layout version="0.1.0">
<catalog_product_view>
<reference name="product.info">
<block type="core/text_list" name="product.info.ctaattributes" before="addtocart" template="ctaattributes/catalog/product/ctabuttons.phtml"/>
</reference>
</catalog_product_view>
</layout>