#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());