Можливо змінити тип блоку в макеті XML?


13

Чи можна змінити тип блоку в макеті XML?

Я знаю, як змінити шаблон за допомогою setTemplateметоду, але я намагаюся змінити тип блоку. Чи можливо це?


будь ласка, поясніть детально, що вам потрібно змінити
Кейул Шах

Відповіді:


7

Зміна типу блоку означає зміну класу блоків, так що ні, але ...

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

  1. Знайдіть ручку макета, на яку буде викликано пізніше АБО переконайтесь, що ваш layout.xmlобробляється після створення блоку, наприклад, з <depends>inCompany_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>

1
Ви також можете створити новий клас блоків, який "успадковує" клас блоків, який ви хочете замінити. Вам потрібно буде додати запис у config.xml вашого власного розширення, щоб поміняти клас блоку своїм. Це має сенс, якщо ви плануєте розширити або змінити функціональність блоку.
Biagio Arobba

3

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

Приклад:

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

Не забудьте продовжити початковий блок.


1

У мене виникло подібне питання, що мені потрібно оновити конкретний блок для конкретного макета.

Що я в кінцевому підсумку роблю, і, здається, працює (в файлі макета)

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

Сподіваюсь, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.