Magento 1.9.0.1を使用しています。特定のユーザーのカートページの総額を10%割引し、カートページ、注文レビューページ、管理パネルに表示します。カートページの総額に10%割引を適用する方法Magento?
私は適用割引クーポンを徹底的に守っていますが、それを行うことはできません。私はGoogleで検索したが、私の要求を満たしていなかった。 Magentoの内のイベントがあり
Magento 1.9.0.1を使用しています。特定のユーザーのカートページの総額を10%割引し、カートページ、注文レビューページ、管理パネルに表示します。カートページの総額に10%割引を適用する方法Magento?
私は適用割引クーポンを徹底的に守っていますが、それを行うことはできません。私はGoogleで検索したが、私の要求を満たしていなかった。 Magentoの内のイベントがあり
、
sales_quote_collect_totals_after
この
は何を行うことができますが、割引を適用する]ボタンをクリックして上のセッション内のフラグを設定されている、あなたの合計が計算されるたびに解雇、および上記の本でていますイベントのオブザーバーメソッドが設定されているかどうかを確認し、割引を適用します。あなたのconfig.xml<global>
<events>
<sales_quote_collect_totals_after>
<observers>
<class>Custom_Module_Model_Observer</class>
<method>collectTotals</method>
</observers>
</sales_quote_collect_totals_after>
</events>
</global>
Observer.phpで関数を作る
Custom
/Module
/Model
/Observer.php
でObserver.phpを作るには
public function collectTotals(Varien_Event_Observer $observer)
{
$quote=$observer->getEvent()->getQuote();
$quoteid=$quote->getId();
//check condition here if need to apply Discount
if($disocuntApply) $discountAmount =5;
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().', Amount Waived');
$address->setBaseDiscountAmount(-($address->getBaseDiscountAmount()-$discountAmount));
}else {
$address->setDiscountAmount(-($discountAmount));
$address->setDiscountDescription('Amount Waived');
$address->setBaseDiscountAmount(-($discountAmount));
}
$address->save();
}//end: if
} //end: foreach
//echo $quote->getGrandTotal();
foreach($quote->getAllItems() as $item){
//We apply discount amount based on the ratio between the GrandTotal and the RowTotal
$rat=$item->getPriceInclTax()/$total;
$ratdisc=$discountAmount*$rat;
$item->setDiscountAmount(($item->getDiscountAmount()+$ratdisc) * $item->getQty());
$item->setBaseDiscountAmount(($item->getBaseDiscountAmount()+$ratdisc) * $item->getQty())->save();
}
}
}
}
collectTotals
関数が呼び出されます、いつでも見積合計が更新されるので、明示的に呼び出す必要はありません。
動作の確認here
magentoセッション変数を設定する場合は、hereをチェックします。
願っています!
マゼンタクーポンのみ使用できます。
ジャスト)Promotions->ショッピングカートの価格ルール
1管理パネルにログイン)新
3)アクション
4を追加)を適用 - >製品の価格割引の割合
その完了しました。
こんにちは、上記のコードを使用すると、エラーが表示されます: メージレジストリキー "_singleton /"は既に存在します – kingp
実際にカートページにカスタムボタンがあります。私はそれをクリックするだけで、このイベントを呼び出すだけです。どうすればいいですか説明してください – kingp