Изменить название продукта в корзине, расценке, счете-фактуре Magento 2 - PullRequest
0 голосов
/ 16 июня 2020

Мне нужно изменить название продукта, видимое для покупателя после добавления его в корзину. Также он должен отображаться в счете-фактуре, электронном письме с заказом и во всем остальном, видимом для клиента.

Я сделал расширение с помощью наблюдателя checkout_cart_product_add_after

   $item = $observer->getEvent()->getData('quote_item');            
   $item = ( $item->getParentItem() ? $item->getParentItem() : $item );
   $item->getProduct()->setName('this is the productname');
   $item->getProduct()->setIsSuperMode(true);

Но исходное название продукта все еще отображается на minicart, cartpage , и т.д. c.

Сообщение о добавлении в корзину - единственное место, где отображается новое измененное имя продукта. Что я должен изменить?

1 Ответ

0 голосов
/ 18 июня 2020

Сам нашел решения.

Надеюсь, это поможет любому, кто его ищет, или, если у вас есть комментарии, как это можно сделать лучше, дайте мне знать.

Создал плагин с этим кодом:

class Item 
{
    public function afterSetProduct(
        \Magento\Quote\Model\Quote\Item $subject,
        $result
    ){
        $subject->setName('New Name');
    }
}

Таким образом, это устанавливает новое имя для элемента цитаты, видимого во всем, кроме тележки и мини-тележки.

Теперь мое новое имя продукта отображается в: - Сообщение о добавлении в корзину - Товар с ценой, даже в админке и счетах

Но не в: - Мини-корзине - Странице корзины

Для страницы корзины:

Я изменил вывод функции getProduct в Magento \ Checkout \ Block \ Cart \ Item \ Renderer:

class Renderer
{
    public function afterGetProductName(
         \Magento\Checkout\Block\Cart\Item\Renderer $subject,
        $result
    ){
        return 'this is the name';
    }
}

Для minicart, также с плагином:

class DefaultItem
{
    public function aroundGetItemData(
     \Magento\Checkout\CustomerData\AbstractItem $subject,
        \Closure $proceed,
        \Magento\Quote\Model\Quote\Item $item
    ){
        $data = $proceed($item);
        $data['product_name'] = 'this is the productname';
        return $data;    
}
...