添加到购物车后如何从观察者重定向?

时间:2014-07-07 09:01:48

标签: magento magento-1.9

我想添加一个按钮" 直接结帐"在我的产品详情页面上。点击后,它会将产品添加到购物车并重定向到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代码,该代码会再次将其重定向到购物车。

我有什么方法可以打破并简单地重定向到结帐页面吗?

3 个答案:

答案 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