我想添加一个按钮" 直接结帐"在我的产品详情页面上。点击后,它会将产品添加到购物车并重定向到checkout/onepage
。
默认情况下,addtocart Magento会重定向到购物车页面。
我在产品页面上添加了一个隐藏字段,并在点击Direct Checkout按钮时使用javascript添加了值。然后在观察者中检查该值并重定向到结帐。
我在观察者checkout_cart_add_product_complete
中实现了上述逻辑,但它没有重定向到结帐页面,而是重定向到购物车页面。
我的观察者功能是:
public function afterAddToCart(Varien_Event_Observer $observer)
{
$params = Mage::app()->getFrontController()->getRequest()->getParams();
if(isset($params['dco']) && $params['dco'] == 1){
Mage::app()->getResponse()->setRedirect(Mage::getUrl("checkout/onepage"));
}
}
我认为它无法正常工作,因为在我的重定向代码之后,magento会执行默认的addtocart代码,该代码会再次将其重定向到购物车。
我有什么方法可以打破并简单地重定向到结帐页面吗?
答案 0 :(得分:1)
请查看此帖子的答案 https://stackoverflow.com/a/4053248/3018289
这是一个快速访问的副本。
你可以创建一个观察者来监听checkout_cart_add_product_complete事件,你可以在那里做类似以下的事情
public function addToCartComplete(Varien_Event_Observer $observer) {
// Send the user to the Item added page
$response = $observer->getResponse();
$request = $observer->getRequest();
$response->setRedirect(Mage::getUrl('checkout/onepage'));
Mage::getSingleton('checkout/session')->setNoCartRedirect(true);
}
您的配置看起来像这样
<frontend>
<events>
<checkout_cart_add_product_complete>
<observers>
<packagename_modulename_observer>
<type>singleton</type>
<class>packagename_modulename/observer</class>
<method>addToCartComplete</method>
</packagename_modulename_observer>
</observers>
</checkout_cart_add_product_complete>
</events>
</frontend>
答案 1 :(得分:0)
我认为这是因为您没有发送回复。我用:
$response = Mage::app()->getFrontController()->getResponse();
$response->setRedirect(Mage::getUrl("checkout/onepage"));
$response->sendResponse();
它适用于1.8,但我想它会用1.9
答案 2 :(得分:0)
我通常选择
protected function _redirectToUrl($url, $code = 302) {
Mage::app()->getResponse()
->setRedirect($url, $code)
->sendResponse();
exit;
}
您可能需要不同的观察者:sales_quote_save_after