Magento2 :remplacer la classe de bloc par type de produit
-
29-09-2020 - |
Question
Désolé mais je ne sais pas comment définir ma question. Laissez-moi vous montrer le code :
Magento1 :
<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>
Le code ci-dessus sert à remplacer la simple entrée du produit dans la page du panier.
Maintenant, ma question est de savoir comment puis-je réaliser la même chose Magento2.
Merci.
La solution
Dans Magento, les moteurs de rendu sont définis sous checkout_cart_item_renderers.xml
, il y en a plusieurs :
app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml
pour les rendus de produits simples et par défautapp/code/Magento/Bundle/view/frontend/layout/checkout_cart_item_renderers.xml
pour les moteurs de rendu de produits groupésapp/code/Magento/Catalog/view/frontend/layout/checkout_cart_item_renderers.xml
pour les moteurs de rendu de produits virtuelsapp/code/Magento/ConfigurableProduct/view/frontend/layout/checkout_cart_item_renderers.xml
pour les moteurs de rendu de produits configurablesapp/code/Magento/Grouped/view/frontend/layout/checkout_cart_item_renderers.xml
pour les rendus de produits groupésapp/code/Magento/GiftMessage/view/frontend/layout/checkout_cart_item_renderers.xml
celui-ci est spécial car il ajoute un bloc supplémentaire pour la fonction de message cadeau aux différents moteurs de renduapp/code/Magento/Wishlist/view/frontend/layout/checkout_cart_item_renderers.xml
celui-ci est également spécial car il ajoute un bloc supplémentaire pour la fonctionnalité de liste de souhaits aux différents moteurs de rendu
Après avoir vérifié ces moteurs de rendu, vous pouvez trouver le moteur de rendu que vous souhaitez remplacer.
Comme vous l'avez dit, vous souhaitez remplacer le simple moteur de rendu de produit qui est un Magento\Checkout\Block\Cart\Item\Renderer
.
Si vous souhaitez remplacer tout le bloc, vous devez utiliser les préférences de Magento 2 :
Dans votre module, vous pouvez créer un di.xml
dossier sous le etc
dossier avec le contenu suivant :
<?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>
Ensuite, vous devez créer le app/code/Vendor/Module/Block/Checkout/Cart/Item/Renderer.php
classe avec le contenu suivant :
<?php
namespace Vendor\Module\Block\Checkout\Cart\Item;
class Renderer extends \Magento\Checkout\Block\Cart\Item\Renderer
{
public function theFunctionYouWantToRewrite()
{
// Do your custom stuff
}
}
Cependant, si vous souhaitez travailler au niveau des méthodes et non au niveau de la classe entière, vous devez utiliser des plugins.
Comme cela peut être très précis, il m'est difficile de vous donner un exemple mais vous pouvez trouver des ressources utiles sur les plugins ici :