Мне необходимо прочитать условие правила цены корзины покупок в пурпурно программно.
Mage_SalesRule_Model_Rule
имеет метод getConditionsSerialized()
который предоставляет условия, но с критической точки 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;}}}
Кто-нибудь знает, как читать состояние более гуманным способом plz? Я хотел бы иметь возможность читать определенные атрибуты.
Огромное спасибо!
Krt_Malta
Вы можете использовать функцию unserialize php, чтобы преобразовать ее в работоспособный массив.
Попробуй это:
$conditions = unserialize($rule->getConditionsSerialized()); print_r($conditions);
Ранее я писал о том, как они работают, и хотя мой пост посвящен созданию правил, он все еще немного объясняет, как вы можете понять условия.
Вот мой пост
Надеюсь, поможет!
unserialize($rule->getConditionsSerialized()
) сделал трюк!
Надеюсь, это поможет кому-то еще!
Magento уже реализует функцию для несериализации условий и действий для себя, все, что вам нужно сделать, это использовать ее.
$conditions = Mage::getModel('salesrule/rules')->load($ruleId)->getConditions();
Каждый вызов ->getConditions()
приведет к более глубоким условиям выполнения объекта правила.
Например, при первом вызове ->getConditions()
он возвращает тип объекта Mage_SalesRule_Model_Rule_Condition_Combine
который является оболочкой по умолчанию для всех внутренних условий. Если вы снова вызываете вызов ->getConditions()->getConditions()
вы получите массив с [X] объектами условий, каждый из которых будет объявлен при создании через интерфейс adminhtml.
Избегайте использования unserialize()
и начинайте использовать встроенные функции Magento.