2013-03-06 8 views
6

Basierend auf anderen StackOverflow-Posts konnte ich den folgenden Code verwenden, um programmatisch einzelne Warenkorb-Preisregel-Coupons in Magento zu generieren.Programmgesteuertes Erstellen von automatisch generierten Gutscheincodes in Magento?

Wie kann ich programmatisch die Funktion "Auto Generate Coupon" aufrufen, um 100 eindeutige Coupons für jede Preisregel zu erstellen? Vielen Dank!

$coupon = Mage::getModel('salesrule/rule'); 
$coupon->setName($_coupon['name']) 
     ->setDescription('this is a description') 
     ->setFromDate(date('Y-m-d')) 
     ->setCouponType(2) 
     ->setCouponCode($_coupon['code']) 
     ->setUsesPerCoupon(1000) 
     ->setUsesPerCustomer(100) 
     ->setCustomerGroupIds(array(1)) //an array of customer groupids 
     ->setIsActive(1) 
     //serialized conditions. the following examples are empty 
     ->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";}') 
     ->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";}') 
     ->setStopRulesProcessing(0) 
     ->setIsAdvanced(1) 
     ->setProductIds('') 
     ->setSortOrder(0) 
     ->setSimpleAction('by_percent') 
     ->setDiscountAmount(100) 
     ->setDiscountQty(null) 
     ->setDiscountStep('0') 
     ->setSimpleFreeShipping('0') 
     ->setApplyToShipping('0') 
     ->setIsRss(0) 
     ->setWebsiteIds(array(1));  
$coupon->save(); 

Zum Beispiel, dieser Preis Regel könnte eine ganze Liste von automatisch generierten Gutscheincodes haben (HTGF-7774, HTGF-2345, etc.), um die Funktion, die verfügbar ist, wenn manuell Preisregeln im Admin-Erstellung Panel.

EDIT:

Ich habe näher gekommen, den folgenden Code verwenden. Sie wissen immer noch nicht, wie speziell

->setName('Name') 
->setDescription('this is a description') 
->setFromDate('2013-03-06') 
->setToDate(NULL) 
->setUsesPerCustomer('100') 
->setIsActive('1') 
->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";}') 
->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";}') 
->setStopRulesProcessing('0') 
->setIsAdvanced('1') 
->setProductIds(NULL) 
->setSortOrder('0') 
->setSimpleAction('by_percent') 
->setDiscountAmount('100.0000') 
->setDiscountQty(NULL) 
->setDiscountStep('0') 
->setSimpleFreeShipping('0') 
->setApplyToShipping('0') 
->setTimesUsed('1') 
->setIsRss('0') 
->setCouponType('2') 
->setUseAutoGeneration('1') 
->setUsesPerCoupon('1000') 
->setCustomerGroupIds(array('1',)) 
->setWebsiteIds(array('1',)) 
->setCouponCode(NULL) 
+0

was Magento-Version ist das? – Meabed

+0

Version 1.702 (aktuelle Installation) –

+0

Ich freue mich berichten zu können, dass dies in Magento 1.9 funktioniert. Yay. –

Antwort

15

Dank einer geschickten Post die automatische Erzeugungsmuster zuweisen ich diesen (http://fragmentedthought.com/fragments/programatically-creating-sales-rule-coupon-code), während Googeln gefunden, antwortete ich meine eigene Frage:

// Get the rule in question 
$rule = Mage::getModel('salesrule/rule')->load(21); //21 = 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'=>5, 
    'format'=>'alphanumeric', 
    'dash_every_x_characters'=>4, 
    'prefix'=>'ABCD-EFGH-', 
    'suffix'=>'-WXYZ', 
    '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; 

Diese erfolgreich generiert die folgenden Codes:

ABCD-EFGH-ZC6V-ZJWD-WXYZ 
ABCD-EFGH-4XMX-353L-WXYZ 
ABCD-EFGH-XCJB-5GQI-WXYZ 
ABCD-EFGH-UEAO-L1NJ-WXYZ 
ABCD-EFGH-59B3-50T2-WXYZ 
+7

Das funktionierte bei mir wie beschrieben, die Codes wurden generiert, aber am Frontend konnte ich die Gutscheincodes nicht verwenden, da laut Magento die Codes ungültig waren, obwohl sie im Magento Admin Panel sichtbar waren. Was ich ändern musste, um sie zum Laufen zu bringen, war folgendes aus dem angegebenen Link hinzuzufügen: '$ coupon-> setType (Mage_SalesRule_Helper_Coupon :: COUPON_TYPE_SPECIFIC_AUTOGENERATED) -> save();'. Dies muss für jeden Coupon gemacht werden, idealerweise würde es direkt nach der folgenden Zeile in Ihrem Snippet hinzugefügt werden: '$ coupon = $ rule-> awareCoupon()'. –

+0

Wie sicher ist das? Könnte das nicht eine Regel erstellen, die bereits existiert? –

+0

Danke @LouisBataillard, es hat nicht einmal die Coupons ohne diese Zeile gespeichert. V1.9.2.4 –

Verwandte Themen