我正在编写一个扩展,当单击产品页面上的“添加到购物车”按钮时,可以直接进入结账页面。我找到了 Magento 1 的解决方案here http://www.magecorner.com/bypass-cart-and-go-to-checkout/我尝试将其适应 Magento 2。这是我的文件:
文件etc/frontend/events.xml:
<?xml version="1.0" encoding="utf-8" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_add_product_complete">
<observer
name="mycompany_go_to_checkout"
instance="MyCompany\GoToCheckout\Observer\GoToCheckout" />
</event>
</config>
文件观察者/GoToCheckout.php:
namespace MyCompany\GoToCheckout\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class GoToCheckout implements ObserverInterface
{
protected $_url;
public function execute(Observer $observer)
{
$urlInterface = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\UrlInterface');
$url = $urlInterface->getUrl('checkout');
$observer->getControllerAction()->getResponse()->setRedirect($url);
}
}
我应该更改或添加什么才能使其正常工作?
任何指导将不胜感激。
下面是完整的工作代码。我在我的模块中使用了 if 。
<?xml version="1.0" encoding="utf-8" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_add_product_complete">
<observer
name="mycompany_go_to_checkout"
instance="MyCompany\GoToCheckout\Observer\GoToCheckout" />
</event>
</config>
观察者代码是:
namespace MyCompany\GoToCheckout\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class GoToCheckout implements ObserverInterface
{
protected $uri;
protected $responseFactory;
protected $_urlinterface;
public function __construct(
\Zend\Validator\Uri $uri,
\Magento\Framework\UrlInterface $urlinterface,
\Magento\Framework\App\ResponseFactory $responseFactory,
\Magento\Framework\App\RequestInterface $request
) {
$this->uri = $uri;
$this->_urlinterface = $urlinterface;
$this->responseFactory = $responseFactory;
$this->_request = $request;
}
public function execute(Observer $observer)
{
$resultRedirect = $this->responseFactory->create();
$resultRedirect->setRedirect($this->_urlinterface->getUrl('checkout'))->sendResponse('200');
exit();
}
}
但此代码仅适用于详细信息页面。在列表页面中它将不起作用,因为它是由 Ajax 管理的。那么解决方案是什么呢?简单,只需创建一个插件结账/控制器/购物车/Add.php并将您的逻辑写入此文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)