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>
Эта функция частично работает, но у меня все еще есть две проблемы.
Во-первых, когда я добавляю простой продукт, он добавляется в список пожеланий, как и ожидалось, но когда я пытаюсь добавить пакет продуктов, то выбор продуктов добавляется неправильно в список желаний.
Вторая проблема заключается в том, что я не хочу перенаправлять клиента в список пожеланий после добавления туда товара, клиент должен оставаться на странице корзины, чего в текущей ситуации не происходит.
Я буду благодарен, если кто-нибудь поможет мне устранить проблему или если кто-нибудь предложит мне лучший способ изменить функцию "Перейти в список желаний", сохранив товар в корзине.
1 answers
Пожалуйста, попробуйте использовать
Перезаписать контроллер Magento\Список желаний\Контроллер\Индекс\Fromcart
Код комментария в функции выполнить
//$this->cart->getQuote()->removeItem($itemId); //$this->cart->save();