Можно ли изменить тип блока в XML-формате макета?


Можно ли изменить тип блока в XML-формате макета?

Я знаю, как изменить шаблон с помощью метода setTemplate, но я пытаюсь изменить тип блока. Возможно ли это?

Author: Roman Snitko, 2014-01-26

4 answers

Изменение типа блока означает изменение класса блока, так что нет, но...

... вы можете просто перезаписать блок:

  1. Найдите дескриптор макета, который будет вызван позже, ИЛИ убедитесь, что ваш layout.xml обрабатывается после создания блока, например, с помощью <depends> в Company_Module.xml
  2. Просто создайте новый блок другого типа с тем же именем

Проблема в том, что это перезаписывает блок и не изменяет тип. Это означает все, что делается на этот блок между созданием и вашим изменением потерян.

Например, для изменения 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>
 7
Author: Fabian Blechschmidt, 2014-01-26 18:59:38

Вы не можете изменить его в файлах компоновки afaik. Однако вы можете расширить и переопределить их в своих конфигурационных файлах.

Пример:

<config>
    <global>
        <blocks>
            <catalog>
                <rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
            </catalog>
        </blocks>
    </global>
</config>

Не забудьте расширить исходный блок.

 3
Author: smdev, 2015-08-10 22:06:21

Я столкнулся с аналогичной проблемой, что мне нужно обновить определенный блок для определенного макета.

То, что я в конечном итоге делаю, и, похоже, это работает (в файле макета)

<controller_x_y>
    <reference name="block_name_reference">
        <block type="mymodule/customblock" name="block_name_reference" />
    </reference>
</controller_x_y>

Надеюсь, это поможет.

 1
Author: Alvin Nguyen, 2017-06-23 02:44:14

Если есть родительский блок, на который можно ссылаться, то вы можете установить 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>
 0
Author: kiatng, 2020-05-05 04:04:02