无法以编程方式应用目录价格规则

时间:2011-12-28 12:26:50

标签: magento

我正在尝试以编程方式创建目录定价规则(特定客户群的类别百分比折扣)。但它没有以编程方式应用。即使您转到目录价格规则部分,然后按“应用规则”按钮 - 它也不会被应用。它仅适用于您在后端编辑此规则,保存而不进行任何修改,然后按“应用规则”。 这是代码:

$catalogRule = Mage::getModel('catalogrule/rule');
$catalogRule->setName($ruleName)
     ->setIsActive(true)
     ->setWebsiteIds(array(1))
     ->setCustomerGroupIds(array($group->getId()))
     ->setSimpleAction('by_percent')
     ->setDiscountAmount($discountAmount);

$categoryCondition = Mage::getModel('catalogrule/rule_condition_combine')
     ->setType('catalogrule/rule_condition_product')
     ->setAttribute('category_ids')
     ->setOperator('==')
     ->setValue($categoryId);

$catalogRule->getConditions()->addCondition($categoryCondition);
$catalogRule->save();
$catalogRule->applyAll();

Mage::app()->removeCache('catalog_rules_dirty');

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

$categoryCondition中有错误。您应该使用catalogrule/rule_condition_product模型,而不是catalogrule/rule_condition_combine此外类别ID值应为 字符串类型 。这真的很奇怪,但是使用整数值它不起作用(在1.6.1.0版本上测试)。

所以,这是解决方案:

$categoryCondition = Mage::getModel('catalogrule/rule_condition_product')
     ->setType('catalogrule/rule_condition_product')
     ->setAttribute('category_ids')
     ->setOperator('==')
     ->setValue("23"); // notice: this is should be a string!