我们在结帐页面有一个类似礼品卡余额使用的系统。结账页面上的客户可以使用他们的礼品卡余额来购买产品。
所以我在付款标签之前添加了一个标签,其中客户可以选择从礼品卡余额中输入使用金额,这样当他们说继续我在自定义Onepage控制器中获取输入的值并将其传递给Onepage.php (模型类)减少总量。
这就是在模型类上做的事情。
public function saveCustomDiscount($discount=0)
{
$this->getQuote()->setGrandTotal($this->getQuote()->getGrandTotal() - $discount);
$this->getQuote()->setBaseGrandTotal($this->getQuote()->getBaseGrandTotal() - $discount);
$this->getQuote()->save();
//$this->getQuote()->collectTotals()->save();
$order = $this->getQuote()->getData();
Zend_Debug::dump($order);
return array();
}
我从控制器Action函数调用此函数正在获取用户输入。
在这里,作为折扣传递的总金额和基数总额并没有减少。和原版一样。
注意: 在自定义订单保存之前。
array(51) {
---------------
["grand_total"] => string(8) "243.7200"
["base_grand_total"] => string(8) "243.7200"
-----------------
}
自定义订单保存后。
array(51) {
---------------
["grand_total"] => float(223.72)
["base_grand_total"] => float(223.72)
-----------------
}
进行调试时,数据类型从字符串更改为float。我必须做什么,以减少自定义折扣的订单总额。请帮帮我。
由于
答案 0 :(得分:3)
您是否设置了discountCode? p>
i.e. $quote->setCouponCode(strlen($couponCode) ? $couponCode : '')
->collectTotals()
->save();
稍后,在报价中,您是否申请了折扣?
i.e. $order->setDiscountAmount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount() - Mage::getSingleton('checkout/session')->getQuote()->getSubtotal());
$order->setShippingAmount(Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingAmount());
$order->setSubtotalWithDiscount(Mage::getSingleton('checkout/session')->getQuote()->getSubtotalWithDiscount());
$order->setGrandTotal(Mage::getSingleton('checkout/session')->getQuote()->getGrandTotal());
等
编辑:
我和一个团队一起做过Wordpress / Magento混合动力车,这肯定给我留下了一些学习经验。 Magento被用作纯交易引擎,我们必须手动完成整个结账流程(包括创建一个自定义WP插件来处理购物车中的每一步)。
在最后记录下来,这样我们就可以看到你的内容(可能会把这个放在你编辑过的问题中):
Mage::log("checkoutprocess: getSubtotal: " . $order->getSubtotal());
Mage::log("checkoutprocess: getTaxAmount: " . $order->getTaxAmount());
Mage::log("checkoutprocess: getDiscountAmount: " . $order->getDiscountAmount());
Mage::log("checkoutprocess: getShippingAmount: " . $order->getShippingAmount());
Mage::log("checkoutprocess: getGrandTotal: " . $order->getGrandTotal());
Mage::log("checkoutprocess: getBaseSubtotal: " . $order->getBaseSubtotal());
Mage::log("checkoutprocess: getBaseDiscountAmount: " . $order->getBaseDiscountAmount());
Mage::log("checkoutprocess: getSubtotalWithDiscount: " . $order->getSubtotalWithDiscount());
Mage::log("checkoutprocess: getBaseGrandTotal: " . $order->getBaseGrandTotal());