2016-08-11 14 views
0

Magento 1.9.0.1을 사용하고 있습니다. 특정 사용자의 장바구니 페이지에서 총액을 10 % 할인하고 장바구니 페이지, 주문 리뷰 페이지 및 관리 패널에 표시합니다.장바구니 페이지 Magento에서 총액을 10 % 할인하는 방법?

적용 할인 쿠폰을 철저히 준수하지만 그렇게 할 수는 없습니다. Google에서 검색했지만 내 요구 사항을 채우지 않았습니다. 마 젠토에서 이벤트가있다

답변

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

Magento 쿠폰 만 사용할 수 있습니다.

그냥
2)
3) 작업
4) 적용 새로 추가 관리자 패널
1) Promotions-> 장바구니 가격 규칙에 로그인 -> 제품 가격 할인

그것의 비율 끝난.