2010-05-09 17 views

risposta

18

Come principio generale, dovresti essere in grado di fare tutto ciò che fa il sistema Magento stesso senza scrivere una singola riga di SQL. Quasi tutte le strutture di dati Magento usano classi di Magento Model.

Eseguire il codice seguente da qualche parte per vedere come appare un modello di regola di vendita/regola. Questo presuppone che si sia creato un singolo Shopping Cart Price regola in amministrazione con un ID di 1

$coupon = Mage::getModel('salesrule/rule')->load(1); 
    var_dump($coupon->getData()); 

Utilizzando i dati oggetto di dumping come una guida, siamo in grado di programatically creare un modello utilizzando il seguente

$coupon = Mage::getModel('salesrule/rule'); 
    $coupon->setName('test coupon') 
    ->setDescription('this is a description') 
    ->setFromDate('2010-05-09') 
    ->setCouponCode('CODENAME') 
    ->setUsesPerCoupon(1) 
    ->setUsesPerCustomer(1) 
    ->setCustomerGroupIds(array(1)) //an array of customer grou pids 
    ->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(10) 
    ->setDiscountQty(null) 
    ->setDiscountStep('0') 
    ->setSimpleFreeShipping('0') 
    ->setApplyToShipping('0') 
    ->setIsRss(0) 
    ->setWebsiteIds(array(1));  
    $coupon->save(); 

Per chi è curioso, il codice sopra è generato, utilizzando la tecnica discussa here

+0

Ho appena incontrato la stessa identica questione come pubblicato Ken, qui di seguito. Le azioni non sono impostate da setActionsSerialized() – Laizer

+0

Sì, sembra che le azioni siano memorizzate come modelli separati nel sistema da qualche parte e quindi aggiunte a salesrule/rule. La mia ipotesi è che il campo serializzato esista per un accesso più rapido. Quindi, dopo aver fatto quanto sopra, dovrai aggiungerli manualmente (tramite un metodo, o magari impostando il loro id di regole). –

+0

Yup - assomiglia a Mage_SalesRule_Model_Rule_Action_Product – Laizer

6

Dai un'occhiata al mio codice. Aggiungerà la condizione di azione.

$coupon_rule = Mage::getModel('salesrule/rule'); 
    $coupon_rule->setName($c_data[1]) 
    ->setDescription($c_data[2]) 
    ->setFromDate($fromDate) 
->setToDate($toDate) 
    ->setUsesPerCustomer(0) 
    ->setCustomerGroupIds(array(0,1,2,3)) //an array of customer grou pids 
    ->setIsActive(1) 
->setCouponType(2) 
->setCouponCode($c_data[0]) 
    ->setUsesPerCoupon(1) 

    //serialized conditions. the following examples are empty 
    ->setConditionsSerialized('') 

    ->setActionsSerialized('') 
    ->setStopRulesProcessing(0) 
    ->setIsAdvanced(1) 
->setProductIds('') 
    ->setSortOrder(0) 
    ->setSimpleAction('by_percent') 
    ->setDiscountAmount($c_data[5]) 
    ->setDiscountQty(1) 
    ->setDiscountStep('0') 
    ->setSimpleFreeShipping('0') 
    ->setApplyToShipping('1') 
    ->setIsRss(1) 
    ->setWebsiteIds(explode(',',$c_data[6])); 

$sku =$c_data[7];   // Put your product SKU here 
$skuCond = Mage::getModel('salesrule/rule_condition_product') 
      ->setType('salesrule/rule_condition_product') 
      ->setAttribute('sku') 
      ->setOperator('==') 
      ->setValue($sku); 
$coupon_rule->getActions()->addCondition($skuCond); 

    $coupon_rule->save(); 

echo "New Coupon was added and its ID is ".$coupon_rule->getId().'<br/>';<br/> 

Se si desidera aggiungere Condizione per lo shopping regola Cart Price poi seguire questo esempio.

$sku =$c_data[7];   // Put your product SKU here 
$found = Mage::getModel('salesrule/rule_condition_product_found') 
     ->setType('salesrule/rule_condition_product_found') 
     ->setValue(1)   // 1 == FOUND 
     ->setAggregator('all'); // match ALL conditions 
$coupon_rule->getConditions()->addCondition($found); 
$skuCond = Mage::getModel('salesrule/rule_condition_product') 
      ->setType('salesrule/rule_condition_product') 
      ->setAttribute('sku') 
      ->setOperator('==') 
      ->setValue($sku); 

$found->addCondition($skuCond);  
    $coupon_rule->save(); 



Problemi correlati