使用Ajax的Magento更新和清理购物车

时间:2014-04-24 10:57:53

标签: ajax magento cart

我试图完成这两天,但没有成功。 我在服务器上有代码:

<?php               
require_once  $_SERVER['DOCUMENT_ROOT'] . '/app/Mage.php';              
Mage::app();                
mage::log('-----');             
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);                
$quote = Mage::getSingleton('checkout/session')->getQuote();                
foreach($quote->getAllItems() as $quote_item) {             
$quote_item->setQty(55);                
}               
$quote->save();             
mage:log($quote_item);              
$session= Mage::getSingleton('checkout/session');               
foreach($session->getQuote()->getAllItems() as $item)               
{               
   $productid = $item->getProductId();              
   $productsku = $item->getSku();               
   $productname = $item->getName();             
   $productqty = $item->getQty();               
}               
mage::log('Product: '.$productname.' Qty: '.$productqty);               
mage::log('-----');             
?>              

我有ajax请求:

 <script type="text/javascript">
 function updateCart(productId, qty) {
    qty = jQuery('#prodqty').val()
jQuery.ajax({
        type: "POST",
        dataType: "HTML",
        data: { productId : productId, qty : qty },
        url: "updateCart.php?productId=" + productId + "&qty=" + qty,
        success: function (data) {
             // alert("Success");
           },
    error: function(data){
                alert("Failure");
             }
         });
     }
 </script>

和.phtml文件:

 <select id='prodqty' onchange="updateCart(20)">
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5</option>
        <option>6</option>
        <option>7</option>                
    </select>

setQty(55) - 这是测试所需的数量 当我通过选择选择选项时,购物车更新完成并且日志说一切都做得很好。但当我按F5购物车数量相同(未更新)

检查情况,我将整个.php代码(从服务器)移动到magento模板(在我们的例子中是cart.php)当我按下F5并且购物车有QTY55(因为我需要)时,我感到非常惊讶

问题 - 我错过了什么?请帮帮我。

2 个答案:

答案 0 :(得分:0)

你应该添加这些行:

Mage::getSingleton('checkout/cart')->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

要么代替$quote->save();之后(不完全确定这个)

答案 1 :(得分:0)

我认为最好制作自定义模块并覆盖Mage_Checkout_CartController。

<config>

<modules>
... Your module info
</modules>

<frontend>
    <routers>
        <checkout>
            <args>
                <modules>
                  <Company_Checkout before="Mage_Checkout">Company_Checkout</Company_Checkout>
                </modules>
            </args>
        </checkout>
    </routers>
</frontend>

你可以做这样的事情:

require_once Mage::getModuleDir('controllers','Mage_Checkout').DS.'CartController.php';

class Company_Checkout_CartController extends Mage_Checkout_CartController
{
/*
 * Custom Method
 */
public function updateAjaxAction()
{

... your custom code

$item->setQty($qtyData);
$cart->save();
$this->_getSession()->setCartWasUpdated(true);
...
//Generate the results in json
$salida = Mage::helper('core')->jsonEncode($result);

然后使用ajax从你的phtml中调用它。我建议你使用Prototype而不是jQuery for Magento。

问候!