Cómo sobrescribir una plantilla a través del módulo en Magento2

9

Estoy creando un módulo y quiero sobrescribir la plantilla app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

¿Es esto posible en un módulo (no un tema)

Desafortunadamente, no parece muy fácil cambiar el nombre del módulo a través del diseño XML, ya que está configurado de forma rígida en https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21

Alex
fuente
Consulte este enlace para obtener la respuesta magento.stackexchange.com/questions/76434/…
Divya Muralidharan
Consulte este enlace para obtener la respuesta magento.stackexchange.com/questions/76434/…
Divya Muralidharan

Respuestas:

10

Agregue la carpeta de diseño de su archivo de módulo [Proveedor] / [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>

También es necesario agregar al módulo xml esta línea, para cargar sus diseños después del catálogo

<sequence>
        <module name="Magento_Catalog"/>
</sequence>
Kandy
fuente
¿De dónde sacaste el nombre admin.product.options?
Alex
Simplemente busque \ Magento \ Catalog \ Block \ Adminhtml \ Product \ Edit \ Tab \ Options por archivos de diseño y descubra la declaración en Magento / Catalog / view / adminhtml / layout / catalog_product_options.xml
KAndy
1
¿No debería ser Vendor_ModuleName::product_options.phtml?
Giel Berkers
Sí, gracias por el punto
KAndy
2
Esta solución solo funciona si la plantilla original se configuró en el archivo Block.php. Si la plantilla original está configurada en layout.xml, esta solución no funcionará. Un mejor enfoque es usar siempre en <action method="setTemplate">lugar de <arguments>. Esta solución funciona en todos los casos.
Jalogut
3
  1. Cree el archivo de diseño correspondiente en su módulo:

[Proveedor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

  1. Establezca su configuración de plantilla personalizada
<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>

NOTA: es muy importante usarlo en <action method="setTemplate">lugar de <arguments>. <arguments>solo funcionará si el bloque no tiene otra plantilla especificada en la declaración xml. En cualquier otro caso, debe <action method="setTemplate">anular la plantilla existente. Es mejor usarlo <action method="setTemplate">porque siempre funciona.

Jalogut
fuente
0

Sí, puede sobrescribir archivos de plantilla de la aplicación / código de su módulo personalizado. Sin embargo, tenga en cuenta que en el concepto de herencia de Magento, los archivos (plantillas, diseños, archivos estáticos) de la aplicación / diseño se sobrescriben en la aplicación / código. Así como el tema hijo sobrescribe el tema padre.

Por lo tanto, considero que es mejor crear un tema personalizado para su módulo personalizado y agregar todos sus archivos phtml, xml, css, js, font e image en la aplicación / diseño.

Iveta Allogenes
fuente