2013-03-06 1 views
6

Основываясь на других сообщениях stackoverflow, я смог использовать следующий код, чтобы программно генерировать отдельные купоны правила цены покупок в Magento.Запрограммируйте автоматические коды скидок в Magento?

Как я могу программным способом вызывать функцию «Автоматическое создание купона» для создания 100 уникальных купонов для каждого правила цены, которое я делаю? Благодаря!

$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(); 

Например, это одно правило цены может иметь целый список автоматически сгенерированные Купоны (htgf-7774, htgf-2345 и т.д.) с помощью функции, которая доступна при создании правил цен вручную в админке панель.

EDIT:

Я получил ближе, используя следующий код. До сих пор не знаю, как конкретно назначить шаблон автоматической генерации

->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

какой пурпурный вариант это? – Meabed

+0

версия 1.702 (последняя установка) –

+0

С удовольствием сообщаю, что это работает в Magento 1.9. ура. –

ответ

15

Благодаря изящным почте я нашел в то время как это (прибегая к помощи http://fragmentedthought.com/fragments/programatically-creating-sales-rule-coupon-code), я ответил на мой собственный вопрос:

// 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; 

Это успешно создан следующие коды:

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

Это сработало для меня, как описано, коды, где сгенерированы, но на внешнем интерфейсе я не смог использовать коды купонов, потому что в соответствии с Magento коды, которые недействительны, даже если они видны в панели администратора Magento. Что я должен был изменить, чтобы заставить их работать, так это добавить следующее из указанной вами ссылки: '$ coupon-> setType (Mage_SalesRule_Helper_Coupon :: COUPON_TYPE_SPECIFIC_AUTOGENERATED) -> save();'. Это необходимо сделать для каждого купона, поэтому в идеале он будет добавлен сразу после следующей строки в вашем фрагменте: '$ coupon = $ rule-> purchaseCoupon()'. –

+0

Насколько это безопасно? Может ли это создать правило, которое уже существует? –

+0

Спасибо @LouisBataillard, он даже не сохранил купоны без этой строки. V1.9.2.4 –