2014-03-25 4 views
0

나는 전체 카트에서 5 % 할인 된 쿠폰을 프로그래밍 방식으로 생성하는 작은 모듈을 만들었습니다.Magento : 쿠폰 코드가 자동으로 적용되지 않습니다.

쿠폰은 한 번만 사용하고 한 고객 만 사용할 수 있습니다. 쿠폰은 정상적으로 생성되며 프로모션> 장바구니 가격 규칙 아래에 표시되며 규칙 이름은 쿠폰 코드와 동일합니다.

제가하는 데 문제는 내가이 쿠폰을 만들려하지만 난이를 추가 할 때 고객이 프론트 엔드에 할인 코드에 필드에 쿠폰 코드를 입력하는 대신 때까지 바구니에 적용하지 않는 것입니다 제품을 바구니에 넣으면 쿠폰이 할인을 적용합니다.

제 질문은 자동으로 쿠폰을 추가하는 것을 중지하는 것입니다.

프로그래밍 방식으로 쿠폰 코드 및 규칙을 만드는 더 좋은 방법이 있다면 알고 싶습니다. 이 중요한 경우

내 코드는 다음과 같습니다 : 나는 당신이 쿠폰 유형에 대한 설정을 추가 할 필요가 추측하고있어

public function createCoupon() { 

    // Get the rule in question 
    $rule = Mage::getModel('salesrule/rule')->load(1); //1 = ID of coupon in question 

    // Define a coupon code generator model instance 
    // Look at Mage_SalesRule_Model_Coupon_Massgenerator for options 
    $generator = Mage::getModel('salesrule/coupon_massgenerator'); 

    $parameters = array(
     'count'=> 1, 
     'format'=> 'alphanumeric', 
     'dash_every_x_characters'=> 4, 
     'prefix'=> 'XXX-', 
     'suffix'=> '-CODE5', 
     'length'=> 8 
    ); 

    if(!empty($parameters['format'])) { 
     switch(strtolower($parameters['format'])) { 
      case 'alphanumeric': 
      case 'alphanum': 
       $generator->setFormat(Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_ALPHANUMERIC); 
       break; 
      case 'alphabetical': 
      case 'alpha': 
       $generator->setFormat(Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_ALPHABETICAL); 
       break; 
      case 'numeric': 
      case 'num': 
       $generator->setFormat(Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_NUMERIC); 
       break; 
     } 
    } 

    $generator->setDash(!empty($parameters['dash_every_x_characters'])? (int) $parameters['dash_every_x_characters'] : 0); 
    $generator->setLength(!empty($parameters['length']) ? (int) $parameters['length'] : 6); 
    $generator->setPrefix(!empty($parameters['prefix']) ? $parameters['prefix'] : ''); 
    $generator->setSuffix(!empty($parameters['suffix']) ? $parameters['suffix'] : ''); 

    // Set the generator, and coupon type so it's able to generate 
    $rule->setCouponCodeGenerator($generator); 
    $rule->setCouponType(Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO); 

    // Get as many coupons as you required 
    $count = !empty($parameters['count'])? (int) $parameters['count'] : 1; 
    $codes = array(); 

    for($i = 0; $i < $count; $i++) { 
     $coupon = $rule->acquireCoupon(); 
     $code = $coupon->getCode(); 
     $codes[] = $code; 
    } 

    return $codes[0]; 
} 

public function createCouponForLike($couponCode) { 
    $model = Mage::getModel('salesrule/rule'); 

    $model->setName($couponCode); 
    $model->setDescription('Discount coupon for liking us on Facebook.'); 
    $model->setFromDate(date('Y-m-d')); 
    $model->setCouponCode($couponCode); 
    $model->setUsesPerCoupon(1); 
    $model->setUsesPerCustomer(1); 
    $model->setCustomerGroupIds('0,1'); 
    $model->setIsActive(1); 
    $model->setConditionsSerialized('a:6:{s:4:"type";s:32:"salesrule/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}'); 
    $model->setActionsSerialized('a:6:{s:4:"type";s:40:"salesrule/rule_condition_product_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}'); 
    $model->setStopRulesProcessing(0); 
    $model->setIsAdvanced(1); 
    $model->setProductIds(''); 
    $model->setSortOrder(1); 
    $model->setSimpleAction('by_percent'); 
    $model->setDiscountAmount(5); 
    $model->setDiscountStep(0); 
    $model->setSimpleFreeShipping(0); 
    $model->setTimesUsed(0); 
    $model->setIsRss(0); 
    $model->setWebsiteIds('1'); 

    $model->save(); 
} 
+0

오래된 중고품을 청소하는 작업을 추가하는 것을 잊지 마십시오. 장바구니에 추가 작업의 속도를 죽일 수있는 많은 장바구니 가격 규칙으로 끝나게됩니다. – McNab

답변

0

,이 시도 :

// The value can be 1 or 2 
// If the value is set to 1 the rule will apply without the need of a coupon 
$model->setCouponType(2); 

자세한 내용은이 가이드를 참조하십시오, http://www.demacmedia.com/magento-commerce/mini-tutorial-creating-shopping-cart-rules-programatically/

편집: 실제로 거기 자습서 꽤 많아요 당신은 아마이 원하는 경우

Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO 

문제가 아마 내가 COUPON_TYPE_AUTO의 찾을 수있는 유일한 언급은이 설정되어 말합니다 될 수 있다는 3 :이미이 일정하게 한 점을 설정하는 것이 후반에 드러내

+1

답변을 주셔서 감사합니다. 그러나 해당 코드 줄을 변경해도 여전히 작동하지 않습니다. 튜토리얼은 좋아 보인다. 그리고 내가이 대답을 받아 들일 수 있다면 – AdRock

+0

그 예제에서 함수는 내가 원한 것을했다. 프로그래밍 방식으로 코드를 생성하는 방법을 찾아야합니다. – AdRock