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
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
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). –
Sí, parece que Mage_SalesRule_Model_Rule_Action_Product – Laizer