我试图完成这两天,但没有成功。 我在服务器上有代码:
<?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(因为我需要)时,我感到非常惊讶
问题 - 我错过了什么?请帮帮我。
答案 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。
问候!