사용자 정의 모듈에서 코어 템플릿 파일을 덮어 쓰는 방법은 무엇입니까?


10

두 파일을 덮어 쓰고 싶습니다. 즉 view.phtmlprint.phtml판매 주문.
(경로 : app/design/frontend/base/default/template/sales/order/)

app/design/frontend/base/default/template/<My Module Name>/sales/order/코어 view.phtmlprint.phtml파일을 덮어 쓰지 않도록 경로를 만들고 싶은 모듈을 만들고 있습니다 .

이 작업을 수행하는 방법을 알려주십시오.

답변:


13

모듈 내부의 레이아웃 XML 파일을 사용하여이 작업을 수행 할 수 있습니다. 모듈의 섹션에 config.xmlMagento가 모듈의 레이아웃 XML (경로 :)을로드 할 수 있도록 섹션이 있어야합니다 app/design/frontend/base/default/layout/mymodulename.xml.

<config>
    [...]
    <frontend>
        [...]
        <layout>
            <updates>
                <mymodulename_layout module="MyModuleName">
                    <file>mymodulename.xml</file>
                </mymodulename_layout>
            </updates>
        </layout>
    </frontend>

이 레이아웃 XML 파일에서 특정 블록을 참조하고 해당 템플릿을 변경할 수 있습니다.

<layout>
    <sales_order_view>
        <reference name="sales.order.view">
            <action method="setTemplate">
                <template>mymodulename/sales/order/view.phtml</template>
            </action>
        </reference>
    </sales_order_view>
    <sales_order_print>
        <reference name="sales.order.print">
            <action method="setTemplate">
                <template>mymodulename/sales/order/print.phtml</template>
            </action>
        </reference>
    </sales_order_print>
</layout>

@ 7ochem, magento2에서 어떻게 달성합니까?
prasad maganti

여기에 의견을 제출하기에는 너무 광범위하고 OP가 요구하는 내용이 아니기
때문에이

3

모듈 이름 'CustomSales'와 패키지 이름 "Exercise"가 있다고 가정하십시오.

1 단계 : app / etc / modules / Exercise_CustomSales.xml에 모듈 구성 파일 작성

<config>
<modules>
    <Exercise_CustomSales>
        <active>true</active>
        <codePool>local</codePool>
    </Exercise_CustomSales>
</modules>

2 단계 : app / code / local / Exercise / CustomSales / etc / config.xml에서 구성 파일 작성

<config>
<modules>
    <Exercise_CustomSales>
        <version>1.7.0.2</version>
    </Exercise_CustomSales>
</modules>
<global>
    <blocks>
        <customsales>
            <class>Exercise_CustomSales_Block</class>
        </customsales>
        <sales>
            <rewrite>
                <order_view>Exercise_CustomSales_Block_Sales_Order_View</order_view>
            </rewrite>
        </sales>
    </blocks>
</global>

3 단계 : 실제 view.phtml 파일 인 app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php를 덮어 쓰는 PHP 파일을 만듭니다.

Exercise_CustomSales_Block_Sales_Order_View가 Mage_Sales_Block_Order_View를 확장 함
{
    보호 된 함수 _construct ()
    {
        부모 :: _ construct ();
        $ this-> setTemplate ( 'customsales / sales / order / view.phtml');
    }
}

4 단계 : 레이아웃 폴더 내에 local.xml 파일을 작성해야합니다 (가능한 경로 : app / design / frontend / package / theme / layout). 이것은 print.phtml 용입니다.

예 : (app / design / frontend / rwd / default / layout / local.xml)

<layout>
<sales_order_print>
    <reference name="sales.order.print">
        <action method="setTemplate">
            <template>customsales/sales/order/print.phtml</template>
        </action>
    </reference>
</sales_order_print>

"app / design / frontend / package / theme / template / customsales / sales / order"내에서 view.phtml 및 print.phtml 파일을 이동하십시오.

마 젠토 캐시를 지 웁니다.


전체 블록을 다시 작성할 필요가 없습니다. 내 대답에서 Mage_Sales_Block_Order_Viewget의 생성자를 먼저 호출하고 템플릿을 설정 한 다음 setTemplate내 예제에서 레이아웃 XML에 의해 시작되고 get을 호출하여 사용자 정의 템플릿을 설정합니다. 잠재적으로 충돌을 일으킬 수 있으므로 재 작성을 사용하지 않는 솔루션을 찾고 싶습니다.
7ochem

7ochem이 옳습니다. 블록에서 템플릿을 설정할 필요가 없습니다. 7ochem의 솔루션은 훌륭하고 저에게 효과적이었습니다.
Rajan Faldu

그것은 당신에게 달려 있습니다. PHP 메소드를 덮어 쓰거나 추가하면 블록을 덮어 써야합니다. 그렇지 않으면 module.xml 또는 local.xml을 통해 템플릿을 변경하십시오. 내 솔루션은 마 젠토 버전에 영향을 미치지 않습니다.
Sohel Rana
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.