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


10

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

app/design/frontend/base/default/template/<My Module Name>/sales/order/코어 view.phtml와 print.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.