Magento2에서 모듈을 통해 템플릿을 덮어 쓰는 방법


9

모듈을 만들고 있는데 템플릿을 덮어 쓰려고합니다 app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

테마가 아닌 모듈에서 가능합니까?

불행히도 레이아웃 XML을 통해 모듈 이름을 변경하는 것은 쉽지 않습니다. https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block에 하드 코딩되어 있습니다. /Adminhtml/Product/Edit/Tab/Options.php#L21



응답이 링크를 참조하십시오 magento.stackexchange.com/questions/76434/...
디비 Muralidharan

답변:


10

모듈 파일 [Vendor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml의 레이아웃 폴더 추가

<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <arguments>
            <argument name="template" xsd:type="string">[Vendor]/[ModuleName]::product_options.phtml</argument>
        </arguments>
    </referenceBlock>
</layout>

카탈로그 후 레이아웃을로드하려면 모듈 xml 에이 줄을 추가해야합니다.

<sequence>
        <module name="Magento_Catalog"/>
</sequence>

이름 admin.product.options은 어디서 얻었 습니까?
Alex

레이아웃 파일로 \ Magento \ Catalog \ Block \ Adminhtml \ Product \ Edit \ Tab \ Options를 검색하고 Magento / Catalog / view / adminhtml / layout / catalog_product_options.xml에서 선언을 찾으십시오.
KAndy

1
그렇지 Vendor_ModuleName::product_options.phtml않습니까?
Giel Berkers

예, 포인트 주셔서 감사합니다
KAndy

2
이 솔루션은 원본 템플릿이 Block.php 파일에 설정된 경우에만 작동합니다. 원본 템플릿이 layout.xml에 설정되어 있으면이 솔루션은 작동하지 않습니다. 더 좋은 방법은 항상 <action method="setTemplate">대신에 사용하는 것입니다 <arguments>. 이 솔루션은 모든 경우에 작동합니다.
Jalogut

3
  1. 모듈에서 해당 레이아웃 파일을 작성하십시오.

[공급 업체] / [모듈 이름] /view/adminhtml/layout/catalog_product_options.xml

  1. 사용자 정의 템플릿 구성 설정
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">[Vendor]_[ModuleName]::product_options.phtml</argument>
        </action>
    </referenceBlock>
</layout>

참고 : <action method="setTemplate">대신 사용하는 것이 매우 중요합니다 <arguments>. <arguments>블록에 xml 선언에 지정된 다른 템플릿이없는 경우에만 작동합니다. 다른 경우 <action method="setTemplate">에는 기존 템플릿을 재정의 해야 합니다. <action method="setTemplate">항상 작동 하기 때문에 사용하는 것이 좋습니다 .


0

예, 사용자 정의 모듈의 앱 / 코드에서 템플릿 파일을 덮어 쓸 수 있습니다. 그러나 Magento의 상속 개념에서 app / design의 파일 (템플릿, 레이아웃, 정적 파일)은 app / code에서 동일하게 덮어 씁니다. 자식 테마가 부모 테마를 덮어 쓰는 것처럼.

따라서 사용자 정의 모듈에 대한 사용자 정의 테마를 작성하고 모든 phtml, xml, css, js, 글꼴 및 이미지 파일을 앱 / 디자인에 추가하는 것이 가장 좋습니다.

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