É possível alterar um tipo de bloco no XML do layout?
Eu sei como alterar o modelo usando o setTemplate
método, mas estou tentando alterar o tipo de um bloco. Isso é possível?
É possível alterar um tipo de bloco no XML do layout?
Eu sei como alterar o modelo usando o setTemplate
método, mas estou tentando alterar o tipo de um bloco. Isso é possível?
Respostas:
Alterar o tipo de bloco significa alterar a classe de bloco, então não, mas ...
... você pode simplesmente substituir o bloco:
layout.xml
seja processado após a criação do bloco, por exemplo, com <depends>
inCompany_Module.xml
O problema é que isso substitui o bloco e não altera o tipo. Isso significa que tudo o que é feito nesse bloco entre a criação e sua alteração é perdido.
Por exemplo, para alterar o catalog.navigation
:
<layout version="0.1.0">
<catalog_category_default translate="label">
<reference name="left">
<block type="myModule/navigation" name="catalog.leftnav" after="currency" template="myModule/catalog/navigation/left.phtml"/>
</reference>
</catalog_category_default>
</layout>
Você não pode alterá-lo nos arquivos de layout disponíveis. Você pode, no entanto, estendê-los e substituí-los em seus arquivos de configuração.
Exemplo:
<config>
<global>
<blocks>
<catalog>
<rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
</catalog>
</blocks>
</global>
</config>
Lembre-se de estender o bloco original.
Eu estava enfrentando um problema semelhante que preciso atualizar um bloco específico para um layout específico.
O que acabo fazendo e parece funcionar é (no arquivo de layout)
<controller_x_y>
<reference name="block_name_reference">
<block type="mymodule/customblock" name="block_name_reference" />
</reference>
</controller_x_y>
Espero que isto ajude.