Qual é a maneira / abordagem correta para modificar um modelo Magento?

15

Sugira-me a abordagem correta. Quero personalizar a página "EMAIL to Friend" na janela pop-up, quando o usuário clicar no botão (enviar este produto por e-mail). Ao ativar a dica de modelo, descobri que o botão é renderizado com

frontend / rwd / default / template / catalog / product / view / sharing.phtml

E o arquivo de layout correspondente é catalog.xml(em frontend / rwd / default / layout)

Então eu criei um local.xmlna mesma pasta onde catalog.xmlexistem com o seguinte código (apenas que eu dei em test.phtmlvez de sharing.phtml, apenas para 'Debug')

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Mas nada acontece, quero dizer como posso alterar (substituir) o design padrão do tema, sem modificar os arquivos xmle os existentes phtml?

Dimag Kharab
fonte

Respostas:

10

É isso que você deve colocar dentro do seu local.xml arquivo.

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Erros que você cometeu

  • Você usou duas alças de atualização de layout : defaultecatalog-product-view . Isso esta errado. Você só precisa de um identificador de atualização de layout. O caminho certo que você deve usar aqui écatalog_product_view

  • então catalog-product-view é desconhecido para o magento. O nome próprio écatalog_product_view

  • Como o bloco de compartilhamento já está definido via catalog.xml, agora você precisa consultá-lo e alterar o modelo adicionando açãosetTemplate . É isso que o script acima faz.

Espero que você entenda

Rajeev K Tomy
fonte
Eu usei o seu local.xml, ainda a sua aparecendo o existente (i criaram uma test.phtml) na pasta especificada
Dimag Kharab
você limpou seu cache? isso deve funcionar, se você tiver feito tudo corretamente.
Rajeev K Tomy
yup caching está desativado no meu caso e eu reindexed também (eu acho que a sua não foi necessário)
Dimag Kharab
adicione isso <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>diretamente no nó <catalog_product_view>. e olhar se o conteúdo do arquivo test.phtml está disponível na parte inferior de uma página de visualização do produto
Rajeev K Tomy
Sem sorte bro ainda
Dimag Kharab
10

Vou tentar dar uma resposta geral.

Como alterar modelos

No seu tema, você pode substituir qualquer phtmlarquivo do tema padrão ou tema principal. Copie o arquivo original para app/design/frontend/[package]/[theme]/template/[path/to/phtml]e faça as alterações.

Se você ainda não tem um tema personalizado específico do projeto, por exemplo, porque acabou de comprar um tema, crie um em

app/design/frontend/[original-package]/[project-name]

Herdará de [original-package]/[default] , você não precisa copiar tudo do padrão, apenas os arquivos nos quais precisa fazer alterações.

Alterações específicas do módulo

Uma alternativa para substituir o phtmlarquivo é alterar o caminho do modelo. Isso geralmente pode ser feito em XML de layout como este:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Mas isso deve ser usado por módulos que precisam mudar um modelo, não para alterações específicas do tema. O novo modelo deve estar base/defaultentão.

Como usar local.xml / theme.xml

O local.xmlarquivo deve estar no diretório do tema real que você está usando, ou seja,

app/design/frontend/[package]/[theme]/layout

Vários local.xmlarquivos na hierarquia de fallback não são levados em consideração. O primeiro destes que pode ser encontrado, é usado:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(assumindo a hierarquia padrão e nenhuma hierarquia definida personalizada)

Como fazer alterações

Você só deve ter modificações no local.xml, não repetir as definições que já estão nos arquivos XML originais. Isso também significa, evite copiar arquivos XML do tema padrão para fazer alterações diretamente nos arquivos. Mantenha o seu temalayout diretório limpo!

Os elementos típicos de local.xmlsão <remove>remover completamente os blocos existentes <action method="unsetChild">e<action method="append"> mover um bloco de um pai para outro ou chamar outros métodos nos blocos existentes para modificar seu comportamento.

Magento 1.9

A partir do Magento 1.9, a melhor prática é realmente não usar layout/local.xmlessas alterações, masetc/theme.xml

Em resumo, você pode adicionar uma atualização de layout em app / design / frontend / yourpackage / etc / theme.xml. A vantagem é que você tem controle sobre a ordem de carregamento de suas atualizações de layout. Antes do Magento 1.9, o local.xml sempre era carregado por último e era impossível executar diretivas de layout depois dele.

Não estou mais usando o local.xml para modificações de temas específicos do projeto. Eu acho que o local.xml é usado apenas por razões de compatibilidade com versões anteriores (em 1.9 e acima), já que não faz sentido usá-lo mais. O Local.xml também é eliminado no Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Fonte: https://erfanimani.com/dont-use-local-xml/

Fabian Schmengler
fonte