在 Magento 中自动创建购物车价格规则

Posted

技术标签:

【中文标题】在 Magento 中自动创建购物车价格规则【英文标题】:Creating a shopping cart price rule in Magento automatically 【发布时间】:2011-02-17 09:22:40 【问题描述】:

我想创建一个购物车价格规则,当用户在我的 Magento 网站上完成一个流程时,他们可以为他们的订单提供 10% 的折扣。

有一种方法here 可以将规则直接插入数据库。这对我的口味来说有点侵入性。

我将如何使用 Magento 方法解决这个问题?

【问题讨论】:

【参考方案1】:

作为一般原则,您应该能够执行 Magento 系统本身所做的任何事情,而无需编写一行 SQL。几乎所有 Magento 数据结构都使用 Magento 模型类。

在某处运行以下代码以查看销售规则/规则模型的外观。这假设您在管理员中创建了一个 ID 为 1 的购物车价格规则

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

使用转储的数据作为指导,我们可以使用以下方法以编程方式创建模型

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

对于任何好奇的人,以上是使用here 讨论的技术生成的代码

【讨论】:

我刚刚遇到了与 Ken 在下面发布的完全相同的问题。动作不是由 setActionsSerialized() 设置的 是的,看起来动作作为单独的模型存储在系统中的某个地方,然后添加到 salesrule/rule。我的猜测是序列化字段的存在是为了更快地访问。因此,在完成上述操作后,您需要手动添加它们(通过某种方法,或者设置它们的规则 ID)。 是的 - 看起来像 Mage_SalesRule_Model_Rule_Action_Product【参考方案2】:

看看我的代码。它会添加动作条件。

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

如果您想为购物车价格规则添加条件,请按照此示例操作。

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

【讨论】:

以上是关于在 Magento 中自动创建购物车价格规则的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Magento 1 中应用我的自定义目录价格规则条件?

Magento 2.3.5:使用自定义选项和价格将产品添加到购物车

Magento Cart API 未显示价格

如何使用Magento中的getQuoteItem()在购物车中添加可配置产品

在 Woocommerce 购物车中自动添加或删除免费产品

js自动刷新价格