Magento 2:anular la clase de bloque por tipo de producto
-
29-09-2020 - |
Pregunta
Lo siento, pero no sé cómo definir mi pregunta. Déjame mostrarte el código:
Magento 1:
<checkout_cart_index>
<reference name="checkout.cart">
<action method="addItemRender">
<type>simple</type>
<block>mymodule/checkout_cart_item_renderer_simple</block>
<template>checkout/cart/item/default.phtml</template>
</action>
</reference>
</checkout_cart_index>
El código anterior sirve para anular la entrada simple del producto en la página del carrito.
Ahora mi consulta es ¿cómo puedo lograr lo mismo en Magento 2.
Gracias.
Solución
En Magento, los renderizadores se definen en checkout_cart_item_renderers.xml
, hay varios de ellos:
app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml
para renderizadores de productos simples y predeterminadosapp/code/Magento/Bundle/view/frontend/layout/checkout_cart_item_renderers.xml
para renderizadores de productos agrupadosapp/code/Magento/Catalog/view/frontend/layout/checkout_cart_item_renderers.xml
para renderizadores de productos virtualesapp/code/Magento/ConfigurableProduct/view/frontend/layout/checkout_cart_item_renderers.xml
para renderizadores de productos configurablesapp/code/Magento/Grouped/view/frontend/layout/checkout_cart_item_renderers.xml
para renderizadores de productos agrupadosapp/code/Magento/GiftMessage/view/frontend/layout/checkout_cart_item_renderers.xml
Este es especial ya que agrega un bloque adicional para la función de mensaje de regalo a los diferentes renderizadores.app/code/Magento/Wishlist/view/frontend/layout/checkout_cart_item_renderers.xml
Este también es especial ya que agrega un bloque adicional para la función de lista de deseos a los diferentes renderizadores.
Después de verificar esos renderizadores, puede encontrar qué renderizador desea anular.
Como dijiste, deseas anular el renderizador de producto simple, que es un Magento\Checkout\Block\Cart\Item\Renderer
.
Si desea anular todo el bloque, debe utilizar las preferencias de Magento 2:
En su módulo, puede crear un di.xml
archivo bajo el etc
carpeta con el siguiente contenido:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Checkout\Block\Cart\Item\Renderer" type="Vendor\ModuleName\Block\Checkout\Cart\Item\Renderer" />
</config>
Entonces necesitas crear el app/code/Vendor/Module/Block/Checkout/Cart/Item/Renderer.php
clase con el siguiente contenido:
<?php
namespace Vendor\Module\Block\Checkout\Cart\Item;
class Renderer extends \Magento\Checkout\Block\Cart\Item\Renderer
{
public function theFunctionYouWantToRewrite()
{
// Do your custom stuff
}
}
Sin embargo, si desea trabajar en los niveles de método y no en todo el nivel de clase, debe utilizar complementos.
Como puede ser muy específico, es difícil para mí darte un ejemplo, pero puedes encontrar recursos útiles sobre complementos aquí: