Найти ближайший промо правило
Мы предлагаем бесплатные продукты на определенных лимитах заказа, сверх Magento CE 1.7.
Чтобы поощрить покупателя совершать больше покупок, мы должны показывать уведомления / оповещения на странице корзины с ближайшей рекламной акцией, которая может быть применена к корзине.
Я нашел похожую запись, но это кажется исчерпывающим процессом, поскольку для поиска соответствующего правила нужно было бы пройти по всем правилам промо-корзины: прочитать условие правила продвижения - Magento
Будем рады узнать, есть ли какой-либо фильтр для упрощения процесса.
1 ответ
Решение
Найдены несколько фильтров и построены выше упомянутого решения:
$attr_match = sprintf('%%%s%%', substr(serialize(array('attribute' => 'base_subtotal')), 5, -1));
$type_match = sprintf('%%%s%%', substr(serialize(array('type' => 'salesrule/rule_condition_address')), 5, -1));
$opr_grt_match = sprintf('%%%s%%', substr(serialize(array('operator' => '>')), 5, -1));
$opr_grteq_match = sprintf('%%%s%%', substr(serialize(array('operator' => '>=')), 5, -1));
$collection = Mage::getResourceModel('salesrule/rule_collection')
->addWebsiteGroupDateFilter(Mage::app()->getWebsite()->getId(), $group_id)
->addFieldToFilter('main_table.coupon_type', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON)
->addFieldToFilter('main_table.conditions_serialized', array(
'like' => $attr_match,
))
->addFieldToFilter('main_table.conditions_serialized', array(
'like' => $type_match,
))
->addFieldToFilter('main_table.conditions_serialized', array(array(
'like' => $opr_grt_match
),array(
'like' => $opr_grteq_match
)))
;
$quote = Mage::getSingleton('checkout/session')->getQuote();
$applied_rules = $quote->getAppliedRuleIds();
if($applied_rules) {
$collection->addFieldToFilter('main_table.rule_id',array(
'nin' => explode(",", $applied_rules),
));
}
$rules = $collection->setOrder('main_table.sort_order', Varien_Data_Collection::SORT_ORDER_ASC)->load();
Ждем комментариев, импровизирую.
В мой блог добавлена статья с более наглядным решением: Magento - Ближайшее промо-правило