Возможная ошибка с комбинацией рекламных акций и атрибутов продукта, всегда возвращающая true при определенных условиях - PullRequest
1 голос
/ 03 августа 2011

Я проводил некоторую отладку, пытаясь понять, как условие для продвижения в корзине покупок проверяет атрибуты при использовании комбинации атрибутов продукта. Я не понял, как 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.

1 Ответ

0 голосов
/ 07 сентября 2011

Это ошибка по крайней мере для Enterprise Edition, и теперь есть исправление, если вы обратитесь в службу поддержки Varien.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...