2014-10-16 1 views
0

체크 아웃 페이지에서 freeshipping을위한 관리 패널에 설정된 최소 금액에 관계없이 고객은 freeshipping에 대한 옵션을 갖게됩니다.맞춤 속성에 따라 magento로 특별 고객을위한 freeshipping을 얻는 방법

freeshipping을 사용/사용하지 않도록 설정했지만 최소한의 양은 아닌 경우 freeshipping을 사용할 수 없습니다.

내 코드가 아래입니다. Mage_Shipping_Model_Shipping을 확장했습니다.

protected function _checkCarrierAvailability($carrierCode, $request = null) 
{ 

    $customer = Mage::getSingleton('customer/session')->getCustomer(); 

    if($carrierCode == 'freeshipping' && !$customer->getData('enable_free_shipping')){ 
     return false; 
    } 
    return true; 
} 
+0

당신이 갖고 싶은 것이 명확하지 않습니까? 실제로는 기본 magento 동작이고 magento는 자동으로 필터링합니다. –

+0

특별 고객에게 무료 배송을 적용 하시겠습니까? 아니면 주문 금액에 따라 무료 배송 기준을 설정 하시겠습니까? 친절하게 성 확인하십시오. – Chiragit007

+0

만약 둘 다 결합하면 config에서 최소 주문 값을 가져와 조건에 "&&"를 붙여야합니다. – Chiragit007

답변

0

물어 어떤 질문을 주시기 바랍니다 당신이 지출 고객이나 VIP 고객 등 특정 높은 할인을 제공하는 동일한 방법입니다. etc.xml

 <salesrule> 
      <rewrite> 
       <quote_freeshipping>Company_Module_Model_Freeshipping</quote_freeshipping> 
      </rewrite> 
     </salesrule> 

에서이 누군가 필요로하는 데 도움이 모델/Freeshipping.php

class Company_Module_Model_Freeshipping extends Mage_SalesRule_Model_Quote_Freeshipping{ 
/** 
* Collect information about free shipping for all address items 
* 
* @param Mage_Sales_Model_Quote_Address $address 
* @return Mage_SalesRule_Model_Quote_Freeshipping 
*/ 
public function collect(Mage_Sales_Model_Quote_Address $address) 
{ 
    parent::collect($address); 
    $quote = $address->getQuote(); 
    $store = Mage::app()->getStore($quote->getStoreId()); 

    $address->setFreeShipping(0); 
    $items = $this->_getAddressItems($address); 
    if (!count($items)) { 
     return $this; 
    } 
    $this->_calculator->init($store->getWebsiteId(), $quote->getCustomerGroupId(), $quote->getCouponCode()); 

    $isAllFree = true; 
    foreach ($items as $item) { 
     if ($item->getNoDiscount()) { 
      $isAllFree = false; 
      $item->setFreeShipping(false); 
     } else { 
      /** 
      * Child item discount we calculate for parent 
      */ 
      if ($item->getParentItemId()) { 
       continue; 
      } 
      $this->_calculator->processFreeShipping($item); 
      $isItemFree = (bool)$item->getFreeShipping(); 
      $isAllFree = $isAllFree && $isItemFree; 
      if ($item->getHasChildren() && $item->isChildrenCalculated()) { 
       foreach ($item->getChildren() as $child) { 
        $this->_calculator->processFreeShipping($child); 
        /** 
        * Parent free shipping we apply to all children 
        */ 
        if ($isItemFree) { 
         $child->setFreeShipping($isItemFree); 
        } 

       } 
      } 
     } 
    } 
    if ($isAllFree && !$address->getFreeShipping()) { 
     $address->setFreeShipping(true); 
    } 

    // Magic works here 

    $customer = Mage::getSingleton('customer/session')->getCustomer(); 
    if($customer->getData('enable_free_shipping')) 
    { 
     $address->setFreeShipping(true); 
    } 
    return $this; 

}} 

희망의

.

1

Anurag, Super simple !!!

예 : 나는 특정 고객에게 $ 50 모든 주문에 무료 배송을 제공 할 예정

"$ (50 개) 고객 이상 무료 배송"새로운 고객 그룹을 만들고 새로운 쇼핑 카트 가격 규칙을 만듭니다. 일반적으로 스크린 샷에 새 고객 그룹이 없기 때문에이 새로운 고객 그룹 만 선택 했으므로 예제를 제공하기 위해 소매 업체를 사용했지만 새 고객 그룹을 선택하십시오.

자동으로 적용되도록 규칙을 설정하십시오 쿠폰 코드 없음

모든 세부 사항은 스크린 샷에 나와 있습니다.

마지막으로는, 고객을 관리> customers-에 가서 변경하려는 하나를 발견하고이 특정 고객에 가서 새로 다시 하나

만들어 자신의 그룹을 변경,이 규칙은 변경 될 수 있습니다 어떤 당신은 그것이되기를 원합니다. 이것은 내가 Mage_SalesRule_Model_Quote_Freeshipping를 후킹하여 해결 한

enter image description here

enter image description hereenter image description here

+0

롭에게 답을 해주지 만 새로운 고객 그룹을 만들면 도움이되지 않습니다. 나를. 원인 웹 사이트는 200 개 이상의 고객 그룹을 가지고 있으며 재 인덱싱은 저에게 지속적인 문제입니다. 내가 한 일을 나누게 해줘. –