Como sobrescrever arquivos de modelo principais de um módulo personalizado?
10
Eu quero substituir dois arquivos. Ou seja, o view.phtmle print.phtmldos pedidos de vendas.
(caminho app/design/frontend/base/default/template/sales/order/:)
Estou criando um módulo no qual desejo criar um caminho app/design/frontend/base/default/template/<My Module Name>/sales/order/para que o núcleo view.phtmle os print.phtmlarquivos não sejam substituídos.
Então, por favor, me guie como realizar essa tarefa.
Você pode fazer isso com um arquivo XML de layout dentro do seu módulo. Você precisa ter uma seção no seu módulo config.xmlcomo esta para permitir que o Magento carregue o XML de layout do seu módulo (caminho app/design/frontend/base/default/layout/mymodulename.xml:):
Etapa 3: Crie um arquivo php que substitua o arquivo view.phtml real, app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php
A classe Exercise_CustomSales_Block_Sales_Order_View estende o Mage_Sales_Block_Order_View
{
função protegida _construct ()
{
pai :: _ construct ();
$ this-> setTemplate ('costumesales / sales / order / view.phtml');
}
}
Etapa 4: você deve criar um arquivo local.xml dentro da pasta de layout (caminho possível: app / design / frontend / package / theme / layout). Isto é para print.phtml.
por exemplo, (app / design / frontend / rwd / default / layout / local.xml)
Não há necessidade de reescrever o bloco inteiro. Na minha resposta, o construtor de Mage_Sales_Block_Order_Viewget é chamado primeiro e define o modelo, depois setTemplateé chamado iniciado pelo layout XML do meu exemplo e define o modelo personalizado. Eu gostaria de procurar soluções que não usem reescritas, pois elas podem causar conflitos.
7ochem 27/03/2015
7ochem está certo. Não há necessidade de definir o modelo no bloco. A solução da 7ochem é boa e funcionou para mim.
Rajan Faldu 27/03/2015
Depende de você. Se você sobrescrever ou adicionar algum método php, precisará sobrescrever o bloco, caso contrário, basta alterar o modelo através de module.xml ou local.xml. Minha solução não afeta nenhuma versão magento, eu acho.
Suponha que o nome do módulo 'CustomSales' e o nome do pacote "Exercício".
Etapa 1: Crie um arquivo de configuração do módulo no aplicativo / etc / modules / Exercise_CustomSales.xml
Etapa 2: Crie um arquivo de configuração em app / code / local / Exercise / CustomSales / etc / config.xml
Etapa 3: Crie um arquivo php que substitua o arquivo view.phtml real, app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php
Etapa 4: você deve criar um arquivo local.xml dentro da pasta de layout (caminho possível: app / design / frontend / package / theme / layout). Isto é para print.phtml.
por exemplo, (app / design / frontend / rwd / default / layout / local.xml)
Mova o arquivo view.phtml e print.phtml dentro de "app / design / frontend / package / theme / template / costumesales / sales / order".
Limpar cache magento.
fonte
Mage_Sales_Block_Order_View
get é chamado primeiro e define o modelo, depoissetTemplate
é chamado iniciado pelo layout XML do meu exemplo e define o modelo personalizado. Eu gostaria de procurar soluções que não usem reescritas, pois elas podem causar conflitos.