Как добавить продукт в список желаний без перенаправления на страницу списка желаний

#magento #magento2 #magento-2.3

#magento #magento2 #magento-2.3

Вопрос:

если мы нажмем кнопку «добавить в список желаний», отобразится страница «СПИСОК ЖЕЛАНИЙ».

Я не хочу отображать страницу списка желаний. вместо этого я хочу быть на той же странице. но элемент должен

«добавить в список желаний».

пожалуйста, помогите мне найти решение.

Ответ №1:

Вы должны настроить процесс добавления Magento в список желаний. Magento использует dataPost.js для публикации форму списка желаний.

Вы можете изменить использование ajax для его достижения.

Ответ №2:

Вы можете переопределить добавить контроллер модуля списка желаний и изменить URL перенаправления на текущий URL :

Создайте модуль для примера списка желаний / Example

etc/di.xml

  <?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="MagentoWishlistControllerIndexAdd" type="WishlistExampleControllerIndexAdd">
    </preference>
 </config>
  

Под Controller/Index/Add.php файл :

 <?php
 
namespace WishlistExampleControllerIndex;
 
use MagentoCatalogApiProductRepositoryInterface;
use MagentoFrameworkAppAction;
use MagentoFrameworkDataFormFormKeyValidator;
use MagentoFrameworkExceptionNotFoundException;
use MagentoFrameworkExceptionNoSuchEntityException;
use MagentoFrameworkControllerResultFactory;
 
/**
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class Add extends MagentoWishlistControllerIndexAdd
{
    /**
     * Adding new item
     *
     * @return MagentoFrameworkControllerResultRedirect
     * @throws NotFoundException
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     * @SuppressWarnings(PHPMD.NPathComplexity)
     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
     */
    public function execute()
    {
        /** @var MagentoFrameworkControllerResultRedirect $resultRedirect */
        $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
        if (!$this->formKeyValidator->validate($this->getRequest())) {
            return $resultRedirect->setPath('*/');
        }
 
        $wishlist = $this->wishlistProvider->getWishlist();
        if (!$wishlist) {
            throw new NotFoundException(__('Page not found.'));
        }
 
        $session = $this->_customerSession;
 
        $requestParams = $this->getRequest()->getParams();
 
        if ($session->getBeforeWishlistRequest()) {
            $requestParams = $session->getBeforeWishlistRequest();
            $session->unsBeforeWishlistRequest();
        }
 
        $productId = isset($requestParams['product']) ? (int)$requestParams['product'] : null;
        if (!$productId) {
            $resultRedirect->setPath('*/');
            return $resultRedirect;
        }
 
        try {
            $product = $this->productRepository->getById($productId);
        } catch (NoSuchEntityException $e) {
            $product = null;
        }
 
        if (!$product || !$product->isVisibleInCatalog()) {
            $this->messageManager->addErrorMessage(__('We can't specify a product.'));
            $resultRedirect->setPath('*/');
            return $resultRedirect;
        }
 
        try {
            $buyRequest = new MagentoFrameworkDataObject($requestParams);
 
            $result = $wishlist->addNewItem($product, $buyRequest);
            if (is_string($result)) {
                throw new MagentoFrameworkExceptionLocalizedException(__($result));
            }
            if ($wishlist->isObjectNew()) {
                $wishlist->save();
            }
            $this->_eventManager->dispatch(
                'wishlist_add_product',
                ['wishlist' => $wishlist, 'product' => $product, 'item' => $result]
            );
 
            $referer = $session->getBeforeWishlistUrl();
            if ($referer) {
                $session->setBeforeWishlistUrl(null);
            } else {
                $referer = $this->_redirect->getRefererUrl();
            }
 
            $this->_objectManager->get(MagentoWishlistHelperData::class)->calculate();
 
            $this->messageManager->addComplexSuccessMessage(
                'addProductSuccessMessage',
                [
                    'product_name' => $product->getName(),
                    'referer' => $referer
                ]
            );
        } catch (MagentoFrameworkExceptionLocalizedException $e) {
            $this->messageManager->addErrorMessage(
                __('We can't add the item to Wish List right now: %1.', $e->getMessage())
            );
        } catch (Exception $e) {
            $this->messageManager->addExceptionMessage(
                $e,
                __('We can't add the item to Wish List right now.')
            );
        }
 
        $resultRedirect->setUrl($this->_redirect->getRefererUrl());
        return $resultRedirect;
    }
}
  

Здесь в контроллере все, что мы меняем, это

 $resultRedirect->setPath('*', ['wishlist_id' => $wishlist->getId()]);
  

Автор:

 $resultRedirect->setUrl($this->_redirect->getRefererUrl());