Magento的促销规则引擎,可以用一个词,叫很好很强大,不过虽然可以在Magento后台可以设置很复杂的各种条件(Conditions),但条件对应的动作(Actions)却很少,而且全部都是只针对价格做文章。如下图:


其实利用这个引擎可以开发自己的各种需求功能,一些收费的插件就是这么在做的,包括几个积分插件,都是用这个引擎来设置积分获取和使用的规则。今天讲下我在利用促销引擎上的一些体会,第一篇讲的是如何添加新的动作(Actions),这个是针对Shopping Cart Price Rules的。
在模块的config.xml添加事件监听,监听adminhtml_block_salesrule_actions_prepareform事件:
<events>
<!--按促销规则送优惠券 -->
<adminhtml_block_salesrule_actions_prepareform>
<observers>
<coupon_present_action>
<type>model</type>
<class>Shuishui_Coupon_Helper_Data</class>
<method>presentCoupon</method>
</coupon_present_action>
</observers>
</adminhtml_block_salesrule_actions_prepareform>
</events>
在对应的Data.php文件里编写监听该事件的函数presentCoupon
//按促销规则送优惠券
public function presentCoupon($observer){
$form = $observer->getForm();
$fieldset=$form->getElement('action_fieldset');
$options = '';
foreach ($fieldset->getElements() as $element) {
if($element->getName() == 'simple_action'){
$options = $element->getOptions();
}
}
//送优惠券
$options['present_coupon'] = '送X张Y类型优惠券(优惠金额为Y)';
$fieldset->removeField('simple_action');
$fieldset->addField('simple_action', 'select', array(
'label' => Mage::helper('salesrule')->__('Apply'),
'name' => 'simple_action',
'options' => $options,
),'^');
}
效果如下:

现在,你就可以像设置自带的促销规则那样,设置自己想要在符合某种条件时所想要的操作,我这里以符合
某种条件时送优惠券为例(该优惠券功能是另外开发的,不在本文的讨论范围
)。
比如,购物满500送一张优惠券等等。条件设置为

操作选择自己刚刚添加的那个,其他设置与一般的规则设置一致。
这样,第一步添加新的动作(Actions)就完成了,至于如何在购物车页面验证这条自己新增的规则,下一篇文章再讲
PS:以上的代码只是例子,每个人可以在规则引擎的基础上按需求开发出自己需求的功能。