Мадженто 2:переопределить класс блокировки по типу продукта

magento.stackexchange https://magento.stackexchange.com/questions/111062

Вопрос

Извините, но я не знаю, как определить свой вопрос. Позвольте мне показать вам код:

Магенто 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
    }
}

Однако, если вы хотите работать на уровне методов, а не на уровне всего класса, вам следует использовать плагины.

Поскольку это может быть очень конкретно, мне сложно привести вам пример, но вы можете найти полезные ресурсы о плагинах здесь:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top