<a href="#" class="action towishlist actions-secondary " title="Wish List" aria-label="Wish List" data-post="{"action":"http:\/\/www.test.in\/wishlist\/index\/add\/","data":{"product":"1","uenc":"aHR0cDovL3BhcGF5YS5rb2Rld29yay5pbi9qZXdlbHJ5Lmh0bWw,"}}" data-action="add-to-wishlist" role="button">
<span>Wish List</span>
</a>can somebody please tell me how to change this to form so that i need to have it a ajax call to add to wishlist from catalog/product/list.phtml
I have written a plugin to send back json response on adding to wishlist, it takes me to a new page with the ajax response.
<?php
namespace Namespace\Vendor\Controller\Plugin;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Framework\App\Action;
use Magento\Framework\Data\Form\FormKey\Validator;
use Magento\Framework\Exception\NotFoundException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Controller\ResultFactory;
class AddPlugin extends \Magento\Wishlist\Controller\Index\Add {
/**
* @var \Magento\Wishlist\Controller\WishlistProviderInterface
*/
protected $wishlistProvider;
/**
* @var \Magento\Customer\Model\Session
*/
protected $_customerSession;
/**
* @var ProductRepositoryInterface
*/
protected $productRepository;
/**
* @var Validator
*/
protected $formKeyValidator;
protected $resultJsonFactory;
public function __construct(
Action\Context $context, \Magento\Customer\Model\Session $customerSession, \Magento\Wishlist\Controller\WishlistProviderInterface $wishlistProvider, ProductRepositoryInterface $productRepository, Validator $formKeyValidator, \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
) {
$this->_customerSession = $customerSession;
$this->wishlistProvider = $wishlistProvider;
$this->productRepository = $productRepository;
$this->formKeyValidator = $formKeyValidator;
$this->resultJsonFactory = $resultJsonFactory;
parent::__construct(
$context, $customerSession, $wishlistProvider, $productRepository, $formKeyValidator
);
}
public function aroundExecute($subject, $procede) {
$response = [];
/** @var \Magento\Framework\Controller\Result\Redirect $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.'));
$response = [
'status' => 'ERROR',
'msg' => __('We can\'t specify a product.'),
];
$resultRedirect->setPath('*/');
return $resultRedirect;
}
try {
$buyRequest = new \Magento\Framework\DataObject($requestParams);
$result = $wishlist->addNewItem($product, $buyRequest);
if (is_string($result)) {
throw new \Magento\Framework\Exception\LocalizedException(__($result));
}
$wishlist->save();
$response = [
'status' => 'OK',
'msg' => $product->getName().__(' Added to wishlist'),
];
$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('Magento\Wishlist\Helper\Data')->calculate();
// $this->messageManager->addComplexSuccessMessage(
// 'addProductSuccessMessage',
// [
// 'product_name' => $product->getName(),
// 'referer' => $referer
// ]
// );
//
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$response = [
'status' => 'ERROR',
'msg' => __('We can\'t add the item to Wish List right now: %1.', $e->getMessage()),
];
} catch (\Exception $e) {
$response = [
'status' => 'ERROR',
'msg' =>__('We can\'t add the item to Wish List right now.'),
];
}
// $resultRedirect->setPath('*', ['wishlist_id' => $wishlist->getId()]);
return $this->resultJsonFactory->create()->setData($response);
}
}
and also any suggestions appreciated.
Thank you
Actually, it creates small form. You can check this here
vendor/magento/magento2-base/lib/web/mage/dataPost.js
Hello @sylvester_mag
Please check below module
https://www.tigren.com/magento-2-extensions/ajax-suite-magento-2/
Hope it will help you.
Hi, did you find a sollution for this?