Можно ли изменить тип блока в макете XML?
Я знаю, как изменить шаблон, используя setTemplate
метод, но я пытаюсь изменить тип блока. Это возможно?
Можно ли изменить тип блока в макете XML?
Я знаю, как изменить шаблон, используя setTemplate
метод, но я пытаюсь изменить тип блока. Это возможно?
Ответы:
Изменение типа блока означает изменение класса блока, поэтому нет, но ...
... вы можете просто перезаписать блок:
layout.xml
обработан после создания блока, например, с помощью <depends>
inCompany_Module.xml
Проблема в том, что это перезаписывает блок и не меняет тип. Это означает, что все, что сделано в этом блоке между созданием и вашим изменением, потеряно.
Например, для изменения 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>
Вы не можете изменить это в файлах макета afaik. Однако вы можете расширить и переопределить их в ваших конфигурационных файлах.
Пример:
<config>
<global>
<blocks>
<catalog>
<rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
</catalog>
</blocks>
</global>
</config>
Не забудьте расширить оригинальный блок.
Я столкнулся с похожей проблемой, что мне нужно обновить конкретный блок для конкретной компоновки.
То, что я в итоге делаю, и, кажется, работает (в файле макета)
<controller_x_y>
<reference name="block_name_reference">
<block type="mymodule/customblock" name="block_name_reference" />
</reference>
</controller_x_y>
Надеюсь это поможет.