Dan*_* Ca 3 magento magento-1.7
我的模块有我的自定义折扣,没关系.
config.xml文件:
<sales>
<quote>
<totals>
<aver>
<class>Dani_Prueba_Model_Total_Aver</class>
<after>subtotal</after>
</aver>
</totals>
</quote>
</sales>
Run Code Online (Sandbox Code Playgroud)
我的模块:
<?php
class Dani_Prueba_Model_Total_Aver extends Mage_Sales_Model_Quote_Address_Total_Abstract{
public function collect(Mage_Sales_Model_Quote_Address $address){
$baseDiscount = 2.5;
$discount = Mage::app()->getStore()->convertPrice($baseDiscount);
$address->setCustomDiscount($baseDiscount);
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseDiscount);
$address->setGrandTotal($address->getGrandTotal() - $discount);
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address){
$this->setCode('aver');
$amount = $address->getCustomDiscount();
if ($amount != 0){
$address->addTotal(array(
'code' => $this->getCode(),
'title' => 'Custom Discount',
'value' => $amount
));
}
return $this;
}
}
Run Code Online (Sandbox Code Playgroud)
这没关系,当我将产品添加到购物车时,会自动应用我的自定义折扣.
但现在我需要用一个按钮来做.当我向购物车添加产品时,不应用折扣并拥有正确的总数.但是当我点击一个按钮,应用我的自定义折扣,并使用其他按钮"取消",取消折扣.我需要一些类似功能的优惠券代码.
我怎么做的?
为此,您需要向表中添加另一个属性/列sales/quote(可能还有sales/order表).
因此,在您的安装脚本中,执行此操作(我还包括sales/order table/entity属性):
$installer->addAttribute('order', 'use_special_coupon', array('type' => 'int', 'grid' => true, 'source' => 'adminhtml/system_config_source_yesno'));
$installer->addAttribute('quote', 'use_special_coupon', array('type' => 'int', 'grid' => true, 'source' => 'adminhtml/system_config_source_yesno'));
$installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'use_special_coupon', 'TINYINT(1) unsigned default 0');
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'use_special_coupon', 'TINYINT(1) unsigned default 0');
Run Code Online (Sandbox Code Playgroud)
然后,在您的控制器中,执行以下操作:
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote
->setUseSpecialCoupon(true)
->save();
Run Code Online (Sandbox Code Playgroud)
或者,在你的removeAction中相反:
$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote
->setUseSpecialCoupon(false)
->save();
Run Code Online (Sandbox Code Playgroud)
然后,最后,在您的整个模型中,将其修改为:
<?php
class Dani_Prueba_Model_Total_Aver extends Mage_Sales_Model_Quote_Address_Total_Abstract{
public function collect(Mage_Sales_Model_Quote_Address $address)
{
if ($address->getQuote()->getUseSpecialCoupon()) {
$baseDiscount = 2.5;
$discount = Mage::app()->getStore()->convertPrice($baseDiscount);
$address->setCustomDiscount($baseDiscount);
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseDiscount);
$address->setGrandTotal($address->getGrandTotal() - $discount);
}
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address){
if ($address->getQuote()->useSpecialCoupon()) {
$this->setCode('aver');
$amount = $address->getCustomDiscount();
if ($amount != 0){
$address->addTotal(array(
'code' => $this->getCode(),
'title' => 'Custom Discount',
'value' => $amount
));
}
}
return $this;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5619 次 |
| 最近记录: |