Cómo anular una plantilla con diseño ALIAS.
Esta respuesta es un posible ejemplo, puede seguir esto para anular la plantilla de ALIAS.
He creado dos módulos de ejemplo, Vendor_Moduletiene un diseño con plantilla de alias, estamos anulando este alias por Vendortwo_Moduletwomódulo.
Suponga que conoce los pasos para crear el módulo, no estoy publicando la creación completa del módulo.
Módulo 1
\ app \ code \ Vendor \ Module \ etc \ frontend \ routes.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="standard">
<route id="module" frontName="module">
<module name="Vendor_Module" />
</route>
</router>
</config>
\ app \ code \ Vendor \ Module \ view \ frontend \ layout \ module_test_test.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Vendor\Module\Block\Test\Test" name="test_test" template="test/test.phtml">
<block class="Vendor\Module\Block\Test\Test" as="testali" template="test/testali.phtml"/>
</block>
</referenceContainer>
</body>
</page>
Módulo 2
\ app \ code \ Vendortwo \ Moduletwo \ etc \ frontend \ routes.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="standard">
<route id="moduletwo" frontName="moduletwo">
<module name="Vendortwo_Moduletwo" />
</route>
</router>
</config>
\ app \ code \ Vendortwo \ Moduletwo \ view \ frontend \ layout \ default.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<referenceBlock name="test_test">
<block class="Vendortwo\Moduletwo\Block\Two\Two" as="testali" template="two/twoalias.phtml"/>
</referenceBlock>
</page>
Después de eliminar el caché, ejecuto http: // localhost / magento210 / module / test / test
La plantilla de alias es anulada por Vendortwo_Moduletwo two/twoalias.phtml

Así es como hacerlo correctamente y sin hacks.
No busqué el caso de uso de OP, pero necesitaba poder modificar los renderizadores dentro del carrito. El problema es que, como en el caso de OP, el
Magento_Checkoutmódulo no proporciona nombres a los renderizadores, lo que significa que no se puede hacer referencia a ellos y que sus plantillas se cambian utilizando métodos tradicionales o documentados. Sin embargo, después de investigar un poco, descubrí cómo hacerlo utilizando las herramientas que Magento2 nos proporciona directamente en el diseño XML.Tenga en cuenta que hay otros lugares donde funciona este mismo enfoque, como en el
Magento\Sales\Block\Items\AbstractItemsbloque. Los módulosMagento_CheckoutyMagento_Salesson los dos que más utilizan los renderizadores de elementos, por lo que cubre muchas de las consultas que llevarían a alguien a cambiar la plantilla de un bloque sin un nombre. La razón por la que esto se publicó se debe a la inevitabilidad de que otros busquen cómo modificar las plantillas de renderizador en los módulos de pago o ventas.Primero voy a proporcionar la solución, y luego la explicaré en detalle para cualquiera que quiera saber por qué funciona.
Solución
Agregue lo siguiente al
checkout_cart_index.xmlarchivo de diseño:Tenga en cuenta que el nombre y la ruta del módulo deben modificarse para reflejar su base de código.
Explicación
Esto funciona aprovechando los
overridden_templatesdatos del bloque, que no está definido por defecto.En
Magento_Checkout, elcheckout_cart_index.xmlarchivo de diseño define el siguiente bloque:Luego define un par de esos renderizadores en el
checkout_cart_item_renderers.xmlarchivo de diseño:Desafortunadamente, no pueden ser referenciados por sus alias
defaultysimple, respectivamente.Sin embargo, al observar el
Magento\Checkout\Block\Cart\GridBloque, que se llamacheckout.cart.formy es el padre de los renderizadores, se puede observar que hay una llamada algetItemHtmlmétodo en la plantilla asociadacart/form.phtml. Ese método luego llamagetItemRenderer. Ambos métodos se definen enGridla clase padre deAbstractBlock. Aquí es dondeoverridden_templatesse usan los datos:Con este conocimiento, llenar el bloque con datos del diseño XML es sencillo utilizando la
argumentssintaxis de Magento2 .fuente
Mi solución no es universal, es un "truco sucio" pero puede ser útil en ciertos casos. Mi muestra es para el renderizador frontend, no para adminhtml (supongo que debería ser lo mismo).
Configure el punto de interrupción
\Magento\Framework\Data\Structure::getChildIdcon la condición " $ parentId == 'checkout.cart.item.renderers' " (este es un nombre para el bloque primario como puede ver en elcheckout_cart_item_renderers.xmldiseño). Todos los bloques secundarios tienen nombres propios (calculados):Use estos nombres en la actualización de diseño de su módulo:
fuente
Vea mi respuesta aquí: https://magento.stackexchange.com/a/239387/14403
Creo que esa es la solución que funcionará mejor para usted. La solución incluye anular cualquier bloque / plantilla que no tenga un nombre solo alias.
fuente