好的,我创建了自定义的Total类,用于添加特殊折扣,并且一切看起来都正常,除了由于某种原因我无法找到,我的总计算了两次!这会导致双倍的折扣,并导致总计不正确。现在,这发生在购物车页面和结帐页面上......但是......当我完成订单时总数很好,只计算一次,总计很好。Magento:自定义总数计数两次?
奇怪的是,这就像收集方法被称为购物车页面的两次,但只有一次完成订单,但我可以'追踪所有这些发生的地方,为什么。
要跳过垃圾代码,我就只粘贴重要
<sales>
<quote>
<totals>
<mydiscount>
<class>ucon_mydiscount/total_mydiscount</class>
<before>subtotal</before>
</mydiscount>
</totals>
</quote>
</sales>
和收藏家的方法
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$quote = $address->getQuote();
$quoteId = $quote->getEntityId();
$items = $quote->getAllItems();
if (!count($items)) {
return $this;
}
$discount = 0;
$productId = 2556;
foreach($items as $item)
{
if($item->getProduct()->getId() == $productId)
{
$qty = $item->getQty();
$totalPrice = round(($item->getRowTotal()+$item->getTaxAmount()),2);
//discount 10%
$discount = round($totalPrice * 0.1,2);
$discount = 0 - $discount;
}
}
if($discount == 0)
return $this;
$this->_setAmount($discount);
$this->_setBaseAmount($discount);
return $this;
}
和提取程序
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
$amount = $address->getMydiscountAmount();
if ($amount != 0) {
$title = Mage::helper('ucon_mydiscount')->__('My discount');
$address->addTotal(array(
'code' => $this->getCode(),
'title' => $title,
'value' => $amount
));
}
return $this;
}
编辑:还有一两件事,我觉得很奇怪 - 我在我的collect方法中执行setValue,而不是addValue,所以即使方法被调用了t它不应该是双重值,它应该简单地将它设置为正确的值两次。
我用Andrey的评论作为出发点,从[这里](http://stackoverflow.com/questions/4363876/how-to-set-custom-grand-total-before-checkout-process-in-magento ) – Relja
我经历过这一次,但现在不能找到我所做的修复它。我相信我复制了一个Mage类,明确地检查了总数是否已经被使用了。尝试在每个收集和提取函数中添加断点或“Mage :: log(__ METHOD __)”,以查看两次调用的内容 - 这是我上次调试的方式。 – clockworkgeek