Php Magento-如何在不使用observer中的优惠券代码的情况下添加自定义折扣
我如何在observer中设置应应用于购物车、订单审核(结帐/一页)、发票和备忘录的折扣(不使用优惠券代码),此解决方案只值得应用于购物车的折扣 和解决方案一样,无法从观察员处应用折扣 更新: 从这里的链接添加答案 config.xmlPhp Magento-如何在不使用observer中的优惠券代码的情况下添加自定义折扣,php,magento,magento-1.7,Php,Magento,Magento 1.7,我如何在observer中设置应应用于购物车、订单审核(结帐/一页)、发票和备忘录的折扣(不使用优惠券代码),此解决方案只值得应用于购物车的折扣 和解决方案一样,无法从观察员处应用折扣 更新: 从这里的链接添加答案 config.xml <?xml version="1.0"?> <config> <modules> <Namespace_Modulename> <version>1.0
<?xml version="1.0"?>
<config>
<modules>
<Namespace_Modulename>
<version>1.0.10</version>
</Namespace_Modulename>
</modules>
<global>
<events>
<sales_quote_collect_totals_after>
<observers>
<namespace>
<type>singleton</type>
<class>Namespace_Modulename_Model_Observer</class>
<method>setDiscount</method>
</namespace>
</observers>
</sales_quote_collect_totals_after>
</events>
</global>
Hi可能值得尝试使用此url
我在博客中使用了这个代码解释,它在之后使用了
销售(报价)(报价)(收集)(总计)(总计)(总计)(总计)(总计)(总计)(总计),我正在为自定义折扣编写代码,但当我将折扣设置为10%时。在前端工作,但当创建发票时,则应用折扣,如10整价格不应用10%。例如,我的订单价值120折扣(20%)24总计96创建发票时,所以只应用折扣价格20而不是24,所以请对此提出建议。@BhaveshGodhani那么您是如何实现20%折扣功能的?请建议我。有一个问题,当你使用贝宝支付方式。PayPal网关拒绝了该请求。字段格式错误:10413购物车项目金额总计与订单金额不匹配。
class Namespace_Modulename_Model_Observer
{
public function setDiscount($observer)
{
$quote = $observer->getEvent()->getQuote();
$quoteid = $quote->getId();
$discountAmount= 10;
if($quoteid) {
if($discountAmount>0) {
$total=$quote->getBaseSubtotal();
$quote->setSubtotal(0);
$quote->setBaseSubtotal(0);
$quote->setSubtotalWithDiscount(0);
$quote->setBaseSubtotalWithDiscount(0);
$quote->setGrandTotal(0);
$quote->setBaseGrandTotal(0);
$canAddItems = $quote->isVirtual()? ('billing') : ('shipping');
foreach ($quote->getAllAddresses() as $address) {
$address->setSubtotal(0);
$address->setBaseSubtotal(0);
$address->setGrandTotal(0);
$address->setBaseGrandTotal(0);
address->collectTotals();
$quote->setSubtotal((float) $quote->getSubtotal() + $address->getSubtotal());
$quote->setBaseSubtotal((float) $quote->getBaseSubtotal() + $address->getBaseSubtotal());
$quote->setSubtotalWithDiscount((float) $quote->getSubtotalWithDiscount() + $address->getSubtotalWithDiscount());
$quote->setBaseSubtotalWithDiscount((float) $quote->getBaseSubtotalWithDiscount() + $address->getBaseSubtotalWithDiscount());
$quote->setGrandTotal((float) $quote->getGrandTotal() + $address->getGrandTotal());
$quote->setBaseGrandTotal((float) $quote->getBaseGrandTotal() + $address->getBaseGrandTotal());
$quote ->save();
$quote->setGrandTotal($quote->getBaseSubtotal()-$discountAmount)
->setBaseGrandTotal($quote->getBaseSubtotal()-$discountAmount)
->setSubtotalWithDiscount($quote->getBaseSubtotal()-$discountAmount)
->setBaseSubtotalWithDiscount($quote->getBaseSubtotal()-$discountAmount)
->save();
if($address->getAddressType()==$canAddItems) {
$address->setSubtotalWithDiscount((float)$address->getSubtotalWithDiscount()-$discountAmount);
$address->setGrandTotal((float) $address->getGrandTotal()-$discountAmount);
$address->setBaseSubtotalWithDiscount((float)$address->getBaseSubtotalWithDiscount()-$discountAmount);
$address->setBaseGrandTotal((float)$address->getBaseGrandTotal()-$discountAmount);
if($address->getDiscountDescription()){
$address->setDiscountAmount(-($address->getDiscountAmount()-$discountAmount));
$address->setDiscountDescription($address->getDiscountDescription().', Custom Discount');
$address->setBaseDiscountAmount(-($address->getBaseDiscountAmount()-$discountAmount));
}else {
$address->setDiscountAmount(-($discountAmount));
$address->setDiscountDescription('Custom Discount');
$address->setBaseDiscountAmount(-($discountAmount));
}
$address->save();
}//end: if
} //end: foreach
foreach($quote->getAllItems() as $item){
$rat=$item->getPriceInclTax()/$total;
$ratdisc=$discountAmount*$rat;
$item->setDiscountAmount(($item->getDiscountAmount()+$ratdisc) * $item->getQty());
$item->setBaseDiscountAmount(($item->getBaseDiscountAmount()+$ratdisc) * $item->getQty())->save();
}
}
}
}
}