Правила Цен Каталога Содержат Условие
Мне нужно сделать скидку на несколько продуктов, в которых артикулы содержат "1513437", например
артикул1=1513437_01
артикул2=1513437_02
и т. Д.
Поэтому я установил новое условие установки правил как
Артикул содержит 1513437
Но это не работает.
Кто-нибудь может помочь?
РЕДАКТИРОВАТЬ
Версия Magento 1.9.2.2
При выключенном плоском режиме он работает.
При включенном плоском режиме он не работает.
Если я использую "содержать" состояние этих продуктов не влияет.
Если я использую условие "не содержит", это повлияет на этот продукт.
Если я использую условие "содержать" в идеальном соответствии, оно работает.
Поэтому я думаю, что проблема в том, что sql-запрос использует LIKE вместо %LIKE%, когда включен плоский режим
4 answers
Таким образом, проблема заключается в getOperatorCondition()
в app/code/core/Mage/Rule/Model/Resource/Rule/Condition/SqlBuilder.php
case '!{}':
if (preg_match('/^.*(category_id)$/', $field) && is_array($value)) {
$selectOperator = ' IN (?)';
} else {
$selectOperator = ' LIKE ?';
}
if (substr($operator, 0, 1) == '!') {
$selectOperator = ' NOT' . $selectOperator;
}
break;
В строке 67
Чтобы решить эту проблему, вы можете взломать ядро файла, изменив его на %, КАК%, или просто добавить % в таком состоянии, как:
Артикул содержит %1513437%
Является Применено правило цены каталога , для этого, пожалуйста, откройте правило цены и нажмите Сохранить и применить кнопку. Его работа для меня см. Ниже снимок экрана.
Я решил эту проблему и восстановился в своем магазине magento. Я попробовал следующие шаги, которые сработали для меня.
Шаг 1: Сделайте вас Правилом цены каталога статусом Неактивным и выполните действие Сохранить и применить .
Шаг 2: Отключена Категория Плоского каталога & Продукт Плоского каталога опция в Система > Конфигурация > КАТАЛОГ > Каталог > Интерфейс
Шаг 3: Теперь измените статус правила цены каталога на Активный и нажал на кнопку Сохранить и применить .
Шаг 4: Теперь включена Категория плоского каталога & Плоский каталог Продукт и очищенный кэш и переиндексированные Плоские данные продукта & Категория Квартира Данные
Надеюсь, этот трюк сработает для вас!
Я улучшил код, предоставленный krybbio, потому что он не работал должным образом для меня.
В моем случае я сделал следующие замены:
Первая строка 96, которую я заменил:
foreach ($value as $v) {
$results[] = $this->_adapter->quoteInto("{$field}{$selectOperator}", $v);
}
С помощью:
foreach ($value as $v) {
if (in_array($operator, array("{}", "!{}"))) {
$v = "%".$v."%";
}
$results[] = $this->_adapter->quoteInto("{$field}{$selectOperator}", $v);
}
Затем строку 114 я заменил:
} else {
$result = $this->_adapter->quoteInto("{$field}{$selectOperator}", $value);
}
С помощью:
} else {
if (in_array($operator, array("{}", "!{}"))) {
$value = "%".$value."%";
}
$result = $this->_adapter->quoteInto("{$field}{$selectOperator}", $value);
}
Попробуйте выполнить следующие действия:
1/ Отключен плоский режим -> Создать правила цен каталога -> сохранить и применить правила -> проверьте внешний интерфейс, чтобы убедиться, что правило применяется
2/ Включен плоский режим -> проверьте внешний интерфейс и проверьте таблицы "catalogrule_product" и "catalogrule_product_price", затем сообщите, если что-то все еще не так
Надеюсь, это поможет