Мадженто 2:переопределить класс блокировки по типу продукта
-
29-09-2020 - |
Вопрос
Извините, но я не знаю, как определить свой вопрос. Позвольте мне показать вам код:
Магенто 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>
Приведенный выше код предназначен для переопределения простого ввода продукта на странице корзины.
Теперь мой вопрос: как я могу добиться того же самого в Магенто 2.
Спасибо.
Решение
В Magento средства рендеринга определены в разделе checkout_cart_item_renderers.xml
, их несколько:
app/code/Magento/Checkout/view/frontend/layout/checkout_cart_item_renderers.xml
для стандартных и простых средств визуализации продуктовapp/code/Magento/Bundle/view/frontend/layout/checkout_cart_item_renderers.xml
для средств визуализации комплектных продуктовapp/code/Magento/Catalog/view/frontend/layout/checkout_cart_item_renderers.xml
для рендереров виртуальных продуктовapp/code/Magento/ConfigurableProduct/view/frontend/layout/checkout_cart_item_renderers.xml
для настраиваемых средств визуализации продуктовapp/code/Magento/Grouped/view/frontend/layout/checkout_cart_item_renderers.xml
для рендереров сгруппированных продуктовapp/code/Magento/GiftMessage/view/frontend/layout/checkout_cart_item_renderers.xml
этот особенный, поскольку добавляет дополнительный блок для функции сообщения о подарке для разных рендереров.app/code/Magento/Wishlist/view/frontend/layout/checkout_cart_item_renderers.xml
этот тоже особенный, поскольку добавляет дополнительный блок для функции списка желаний для разных рендереров.
После проверки этих рендереров вы сможете найти, какой рендерер вы хотите переопределить.
Как вы сказали, вы хотите переопределить простой рендеринг продукта, который представляет собой Magento\Checkout\Block\Cart\Item\Renderer
.
Если вы хотите переопределить весь блок, вам следует использовать настройки Magento 2:
В вашем модуле вы можете создать di.xml
файл под etc
папка со следующим содержимым:
<?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>
Затем вам необходимо создать app/code/Vendor/Module/Block/Checkout/Cart/Item/Renderer.php
класс следующего содержания:
<?php
namespace Vendor\Module\Block\Checkout\Cart\Item;
class Renderer extends \Magento\Checkout\Block\Cart\Item\Renderer
{
public function theFunctionYouWantToRewrite()
{
// Do your custom stuff
}
}
Однако, если вы хотите работать на уровне методов, а не на уровне всего класса, вам следует использовать плагины.
Поскольку это может быть очень конкретно, мне сложно привести вам пример, но вы можете найти полезные ресурсы о плагинах здесь: