En Magento 1, como desarrollador de módulos, es posible cambiar la plantilla de un bloque usando un código XML de diseño similar a este
<reference name="block_to_change">
<action method="setTemplate">
<param>/path/to/template.phtml</param>
</action>
</reference>
y luego agregando su plantilla al tema base.
app/design/frontend/base/default/template/path/to/template.phtml
¿Es posible, como desarrollador de módulos, hacer algo similar en Magento 2? ¿O necesitaría usar código XML o PHP de diseño para eliminar el bloque que me interesa e insertar un nuevo bloque con una plantilla diferente (cuya clase extiende la clase de bloque original)
Sé que podría crear un tema personalizado que reemplace una plantilla, pero estoy interesado en crear un módulo que cambie la plantilla predeterminada, pero que aún permita que un tema personalizado reemplace esa plantilla.
El nodo de acción está en desuso, pero puede usar argumentos de bloque
fuente
addtocart.phtml
archivo de acuerdo con la configuración del sistema y también quiero actualizar este módulo personalizado utilizando<action method='setTemplate'>
) funciona sin problemas.Para comprender la diferencia entre
<arguments>
y<action>
debe comprender cómo funcionan los constructores de objetos Magento 2. Si anula un constructor en Magento, siempre obtendrá un$data-parameter
que es una matriz. Estos son los datos provistos en los archivos XML y traducidos al interno$_data-array
de\Magento\Framework\DataObject
:Sin embargo, en el caso de una plantilla, si
setTemplate()
se usa en el pseudoconstructor (_construct()
, subrayado simple), esto significa que$data
se anula, sin importar si está configurado en el XML.En ese escenario,
<action>
se prefiere, ya que esto se ejecuta después del constructor y pseudoconstructor.fuente
Lo siguiente funcionó para mí en Magento EE 2.2.3
Nota: si está utilizando un módulo personalizado para cambiar la plantilla de un núcleo y se está volviendo loco porque el código recortado anterior no funciona, asegúrese de que su módulo esté cargado después del módulo central que está intentando cambiar (module.xml) y usted ejecutado
bin/magento setup:upgrade
:)fuente
No sé por qué, pero creo que esta es la mejor manera:
fuente
Esto funcionará solo si su bloque no se sobrescribió antes de usar el
setTemplate
método. Magento 2.2.xy superior.fuente