magento 2 - Сохраняйте товар в корзине, добавляя его в список желаний


Я пытаюсь изменить поведение кнопки "Перейти в список желаний" в корзине, чтобы добавить товар в список желаний, сохраняя при этом товар в корзине.

Я создал пользовательский блок AddToWishlist внутри своего пользовательского модуля, который очень похож на блок Magento\Список желаний\Блок\Корзина\Товар\Средство визуализации\Действия\Список желаний, вот мой код:

AddToWishlist.php

namespace MyNamespace\Wishlist\Block\Cart\Item\Renderer\Actions;
use Magento\Framework\View\Element\Template;
use Magento\Wishlist\Helper\Data;

class AddToWishlist extends \Magento\Checkout\Block\Cart\Item\Renderer\Actions\Generic
{
    /**
     * @var Data
     */
    protected $wishlistHelper;

    /**
     * @param Template\Context $context
     * @param Data $wishlistHelper
     * @param array $data
     */
    public function __construct(
        Template\Context $context,
        Data $wishlistHelper,
        array $data = []
    ) {
        $this->wishlistHelper = $wishlistHelper;
        parent::__construct($context, $data);
    }

    /**
     * Check whether "add to wishlist" button is allowed in cart
     *
     * @return bool
     */
    public function isAllowInCart()
    {
        return $this->wishlistHelper->isAllowInCart();
    }

    /**
     * Get JSON POST params for moving from cart
     *
     * @return string
     */
    public function getAddFromCartParams()
    {
        return $this->wishlistHelper->getAddParams($this->getItem()->getProduct());
    }
}

Вот код шаблон:

Add_to_wishlist.phtml Добавить в список.

<?php if ($block->isAllowInCart() && $block->isProductVisibleInSiteVisibility()): ?>
<a href="#"
   data-post='<?php /* @escapeNotVerified */ echo $block->getAddFromCartParams(); ?>'
   class="use-ajax action action-towishlist">
    <span><?php /* @escapeNotVerified */ echo __('Add to Wish List'); ?></span>
</a>

И, наконец, я добавил блок в корзину в checkout_cart_item_renderers.xml расположение:

Checkout_cart_item_renderers.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.cart.item.renderers.default.actions">
            <referenceBlock name="checkout.cart.item.renderers.default.actions.move_to_wishlist" remove="true" />

            <block class="MyNamespace\Wishlist\Block\Cart\Item\Renderer\Actions\AddToWishlist" name="checkout.cart.item.renderers.default.actions.add_to_wishlist" template="cart/item/renderer/actions/add_to_wishlist.phtml" before="checkout.cart.item.renderers.default.actions.edit"/>
        </referenceBlock>
        <referenceBlock name="checkout.cart.item.renderers.simple.actions">
            <referenceBlock name="checkout.cart.item.renderers.simple.actions.move_to_wishlist" remove="true" />

            <block class="MyNamespace\Wishlist\Block\Cart\Item\Renderer\Actions\AddToWishlist" name="checkout.cart.item.renderers.simple.actions.add_to_wishlist" template="cart/item/renderer/actions/add_to_wishlist.phtml" before="checkout.cart.item.renderers.simple.actions.edit"/>
        </referenceBlock>
        <referenceBlock name="checkout.cart.item.renderers.bundle.actions">
            <referenceBlock name="checkout.cart.item.renderers.bundle.actions.move_to_wishlist" remove="true" />

            <block class="MyNamespace\Wishlist\Block\Cart\Item\Renderer\Actions\AddToWishlist" name="checkout.cart.item.renderers.bundle.actions.add_to_wishlist" template="cart/item/renderer/actions/add_to_wishlist.phtml" before="checkout.cart.item.renderers.bundle.actions.edit"/>
        </referenceBlock>
    </body>
</page>

Эта функция частично работает, но у меня все еще есть две проблемы.

Во-первых, когда я добавляю простой продукт, он добавляется в список пожеланий, как и ожидалось, но когда я пытаюсь добавить пакет продуктов, то выбор продуктов добавляется неправильно в список желаний.

Вторая проблема заключается в том, что я не хочу перенаправлять клиента в список пожеланий после добавления туда товара, клиент должен оставаться на странице корзины, чего в текущей ситуации не происходит.

Я буду благодарен, если кто-нибудь поможет мне устранить проблему или если кто-нибудь предложит мне лучший способ изменить функцию "Перейти в список желаний", сохранив товар в корзине.

Author: Milko Lorinkov, 2016-09-20

1 answers

Пожалуйста, попробуйте использовать

  1. Перезаписать контроллер Magento\Список желаний\Контроллер\Индекс\Fromcart

  2. Код комментария в функции выполнить

//$this->cart->getQuote()->removeItem($itemId);
//$this->cart->save();
 1
Author: Dan Nguyen, 2017-01-24 11:42:07