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';

}
Foi útil?

Solução 4

Encontrei uma solução - ela está dividida em duas partes.

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

  1. 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top