레이아웃 XML에서 블록 유형을 변경할 수 있습니까?


13

레이아웃 XML에서 블록 유형을 변경할 수 있습니까?

방법을 사용하여 템플릿을 변경하는 방법을 알고 setTemplate있지만 블록 유형을 변경하려고합니다. 이게 가능해?


무엇을 변경해야하는지 자세히 설명해주세요
Keyul Shah

답변:


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>

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.