2010-05-09 10 views

Respuesta

18

Como principio general, debe poder hacer cualquier cosa que el sistema Magento mismo haga sin escribir una sola línea de SQL. Casi todas las estructuras de datos de Magento usan clases de modelos de Magento.

Ejecute el siguiente código en alguna parte para ver cómo es un modelo de regla de ventas/regla. Esto supone que ha creado una única cesta de la compra Precio Regla en el admin con un diámetro interior de 1

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

Utilizando los datos objeto de dumping como una guía, que programáticamente podemos crear un modelo utilizando la siguiente

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

Para cualquiera que sea curioso, el código anterior es generado, utilizando la técnica que se describe here

+0

Me acabo de encontrar con el mismo problema exacto tal como fue anunciado Ken, a continuación. Las acciones no están establecidas por setActionsSerialized() – Laizer

+0

Sí, parece que las acciones se almacenan como Modelos separados en el sistema en algún lugar y luego se agregan a la regla de ventas. Supongo que el campo serializado existe para un acceso más rápido. Entonces, después de hacer lo anterior, los agregará manualmente (a través de algún método, o tal vez estableciendo su ID de regla). –

+0

Sí, parece que Mage_SalesRule_Model_Rule_Action_Product – Laizer

6

Eche un vistazo a mi código. Agregará condiciones de acción.

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

Si desea agregar Condición para ir de compras regla carrito precio entonces seguir este ejemplo.

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



Cuestiones relacionadas