Я проводил некоторую отладку, пытаясь понять, как условие для продвижения в корзине покупок проверяет атрибуты при использовании комбинации атрибутов продукта. Я не понял, как Magento получал значения пользовательских атрибутов из продукта, если этот пользовательский атрибут не добавлен в продукт элемента цитаты в файле config.xml.
Итак, когда я отлаживал логику проверки, я провел тест, в котором я создал атрибут package_price, назначил его продукту и присвоил ему значение 20. Затем я настроил условие:
Если товар НАЙДЕН в корзине, и ВСЕ эти условия верны:
Стоимость пакета больше 1
Когда дело доходит до логики, вы в конечном итоге попадаете сюда /app/code/core/Mage/Rule/Model/Condition/Abstract.php
и в методе validateAttribute
. Он появляется здесь после попытки получить значение атрибута из продукта элемента цитаты. В моем случае параметр $validatedValue
был нулевым, поскольку он не мог получить его из массива данных.
Код работает прямо здесь ...
case '<=': case '>':
if (is_array($validatedValue) || is_null($validatedValue)) {
$result = false;
} else {
$result = $validatedValue<=$value;
}
break;
И это, очевидно, устанавливается в ложь. Что я не понимаю после оператора switch у вас есть этот маленький кусок кода
if ('!='==$op || '>'==$op || '<'==$op || '!{}'==$op || '!()'==$op) {
$result = !$result;
}
Который устанавливает переменную $ result для некоторых операторов как противоположную, поэтому в моем случае он сделал это истинным, а затем сделал мое условие выполненным, хотя это не должно было произойти. Я думаю, что каждый раз, когда кто-то делает акцию в корзине покупок с пользовательскими атрибутами, которые не добавляются в элемент цитаты, это часто случается, если у вас есть только пользователи-администраторы, работающие с интерфейсом, которые пытаются добавить новые атрибуты к продуктам и создать для них рекламные акции. Акция всегда будет проходить, если они используют один из этих операторов. Я не могу на всю жизнь понять, что понадобится или почему> будет отличаться от> =.
Не говоря уже о том, не считаете ли вы, что какой-либо атрибут, помеченный как используемый для условий промо, должен быть добавлен к продукту цитаты?
Может кто-нибудь помочь мне понять, почему это должно работать именно так. Я хотел опубликовать это здесь, прежде чем связаться с Magento.