2016-08-11 7 views
0

Magento 1.9.0.1を使用しています。特定のユーザーのカートページの総額を10%割引し、カートページ、注文レビューページ、管理パネルに表示します。カートページの総額に10%割引を適用する方法Magento?

私は適用割引クーポンを徹底的に守っていますが、それを行うことはできません。私はGoogleで検索したが、私の要求を満たしていなかった。 Magentoの内のイベントがあり

答えて

0

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をチェックします。

願っています!

+0

こんにちは、上記のコードを使用すると、エラーが表示されます: メージレジストリキー "_singleton /"は既に存在します – kingp

+0

実際にカートページにカスタムボタンがあります。私はそれをクリックするだけで、このイベントを呼び出すだけです。どうすればいいですか説明してください – kingp

0

マゼンタクーポンのみ使用できます。

ジャスト)Promotions->ショッピングカートの価格ルール
1管理パネルにログイン)新
3)アクション
4を追加)を適用 - >製品の価格割引の割合

その完了しました。

関連する問題