Можно ли изменить тип блока в XML-формате макета?
Можно ли изменить тип блока в XML-формате макета?
Я знаю, как изменить шаблон с помощью метода setTemplate
, но я пытаюсь изменить тип блока. Возможно ли это?
4 answers
Изменение типа блока означает изменение класса блока, так что нет, но...
... вы можете просто перезаписать блок:
- Найдите дескриптор макета, который будет вызван позже, ИЛИ убедитесь, что ваш
layout.xml
обрабатывается после создания блока, например, с помощью<depends>
вCompany_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>
Надеюсь, это поможет.
Если есть родительский блок, на который можно ссылаться, то вы можете установить type
следующим образом:
<catalog_product_view>
<reference name="product.info">
<block type="student/course_addtocart" name="product.info.addtocart" as="addtocart" template="catalog/product/view/addtocart.phtml"/>
</reference>
</catalog_product_view>