Saltar al contenido

Magento 2: Cambiar la plantilla de un bloque

Solución:

Por supuesto, es posible:

<referenceBlock name="copyright">
    <action method="setTemplate">
        <argument name="template" xsi:type="string">Dfr_Backend::page/copyright.phtml</argument>
    </action>
</referenceBlock>

El nodo de acción está en desuso, pero puede usar argumentos de bloque

<referenceBlock name="block_to_change">
    <arguments>
        <argument name="template" xsi:type="string">[Vendor]_[Module]::/path/to/template.phtml</argument>
    </arguments>
</referenceBlock>

Para entender la diferencia entre <arguments> y <action> debe comprender cómo funcionan los constructores de los objetos de Magento 2. Si anula un constructor en Magento, siempre obtendrá un $data-parameter que es una matriz. Estos son los datos proporcionados en los archivos XML y traducidos al interno. $_data-array de MagentoFrameworkDataObject:

<referenceBlock name="catalog.topnav">
    <arguments>
        <argument name="template" xsi:type="string">Foo_Bar::buzz.phtml</argument>
    </arguments>
</referenceBlock>    

...

public function __construct(array $data = [])
{
    // $_data is populated with the arguments from XML:
    // so $_data['template'] is now 'Foo_Bar::buzz.phtml'
    $this->_data = $data;
}

Sin embargo, en el caso de una plantilla, si setTemplate() se usa en el pseudoconstructor (_construct(), guión bajo simple), esto significa que el $data se anula, sin importar si está configurado en el XML.

public function _construct()
{
    $this->setTemplate('foo/bar.phtml');
}

En ese escenario, <action> se prefiere, ya que se ejecuta después del constructor y pseudoconstructor.

<referenceBlock name="catalog.topnav">
    <action method="setTemplate">
        <argument name="template" xsi:type="string">Foo_Bar::buzz.phtml</argument>
    </action>
</referenceBlock> 
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *