0

我想在我的产品详细信息页面上添加一个按钮“直接结帐”。点击后,它会将产品添加到购物车并重定向到checkout/onepage.

默认情况下,addtocart Magento 重定向到购物车页面。

我在产品页面上添加了一个隐藏字段,并使用 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 代码,它再次将它重定向到购物车。

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

4

3 回答 3

1

我通常会去

protected function _redirectToUrl($url, $code = 302)  {

    Mage::app()->getResponse()
        ->setRedirect($url, $code)
        ->sendResponse();
    exit;
}

但是,您可能需要不同的观察者:sales_quote_save_after

于 2014-07-07T17:20:26.457 回答
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>
于 2017-03-20T12:04:16.947 回答
0

我认为这是因为您没有发送回复。我用 :

$response = Mage::app()->getFrontController()->getResponse();
$response->setRedirect(Mage::getUrl("checkout/onepage"));
$response->sendResponse();

它适用于 1.8,但我想它适用于 1.9

于 2014-07-07T09:06:23.863 回答