2

我需要以编程方式阅读 magento 中购物车价格规则的条件。

Mage_SalesRule_Model_Rule有一种方法getConditionsSerialized()确实提供了条件,但至少可以说是一种神秘的方式,例如:

a:7:{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";s:10:"conditions";a:1:{i:0;a:5:{s:4:"type";s:32:"salesrule/rule_condition_address";s:9:"attribute";s:13:"base_subtotal";s:8:"operator";s:2:">=";s:5:"value";s:1:"1";s:18:"is_value_processed";b:0;}}}

有人知道如何以更人道的方式阅读条件吗?我希望能够读取某些属性。

非常感谢!

Krt_马耳他

4

3 回答 3

5

您可以使用 php 的unserialize函数将其转换为可用的数组。

试试这个:

$conditions = unserialize($rule->getConditionsSerialized());
print_r($conditions);

我之前写过关于这些如何工作的博客,虽然我的帖子是关于创建规则的,但它仍然解释了一些关于如何理解条件的内容。

这是我的帖子

希望能帮助到你!

于 2012-05-30T08:58:41.880 回答
1

unserialize($rule->getConditionsSerialized()) 成功了!

希望它可以帮助别人!

于 2012-05-30T08:56:34.213 回答
1

Magento 已经实现了一个函数来为自己反序列化条件和动作,你所要做的就是使用它。

$conditions = Mage::getModel('salesrule/rules')->load($ruleId)->getConditions();

每次调用->getConditions()都会让您在执行规则对象中获得更深入的条件。

例如,第一次调用->getConditions()它将返回一个对象类型,Mage_SalesRule_Model_Rule_Condition_Combine这是所有内部条件的默认包装器。如果再次链接调用,->getConditions()->getConditions()您将获得一个包含 [X] 个条件对象的数组,每个条件对象都是您在通过 adminhtml 接口创建它们时声明的类型。

避免使用unserialize()并开始使用 Magento 内置函数。

于 2016-05-16T19:26:51.350 回答