[msProducts] Как вывести товары у которых old_price больше чем price
Здравствуйте!
Ситуация следующая: 1С-ники выгружают цены на сайт таким образом, что, если у товара есть скидка, то актуальная цена выгружается в свойство товара price, а старая цена — в old_price. Но если у товара нет скидки, они выгружают в price и old_price одинаковые значения цен.
Вопрос: как сформулировать запрос к msProducts, чтобы он выводил только товары у которых old_price > price?
Заранее спасибо за подсказку
Ситуация следующая: 1С-ники выгружают цены на сайт таким образом, что, если у товара есть скидка, то актуальная цена выгружается в свойство товара price, а старая цена — в old_price. Но если у товара нет скидки, они выгружают в price и old_price одинаковые значения цен.
Вопрос: как сформулировать запрос к msProducts, чтобы он выводил только товары у которых old_price > price?
{'!msProducts' | snippet:[
'tpl' => 'tpl_products_listing',
'limit' => 30,
'parents' => 0,
'sortby' => 'RAND()',
'includeThumbs' => 'webp_m',
'where' => '[{ "Data.old_price:>":"Data.price" }, { "Data.internet_magazin":"1" }]'
]}
Вот такая конструкция всё равно выводит любые товары. Или я вообще неправильно пытаюсь решить эту задачу? А как тогда надо?Заранее спасибо за подсказку
Комментарии: 9
А что за поле — Data.internet_magazin? Можно включить параметр showLog и посмотреть какой запрос формируется.
p.s. Проверил у себя, условие в where рабочее:
Но, поля расширены через доп — msAddField. Если же internet_magazin это твшка, опция, тогда надо по другому запрос переписать.
{'!msProducts' | snippet:[
'tpl' => '@INLINE {$id} - {$pagetitle} - {$price} - {$old_price}</br>',
'limit' => 30,
'parents' => 151,
'sortby' => 'RAND()',
'where' => '[{"Data.old_price:>":"Data.price"},{"Data.internet_magazin:=":"1"}]',
'showLog' => 1
]}
//формирует запрос
Added where condition: class_key=msProduct, Data.old_price:>=Data.price, Data.internet_magazin:==1, ....
Но, поля расширены через доп — msAddField. Если же internet_magazin это твшка, опция, тогда надо по другому запрос переписать.
internet_magazin — это свойство товара, расширенное вручную, не через msAddField
Копирую ваш вариант, естественно со своими родителями, выдаёт всё равно все товары подряд и со скидкой и без. Если убрать условие по свойству internet_magazin, то выдаёт то же самое, все товары.
Вот запрос: Added where condition: class_key=msProduct, Data.old_price:>=Data.price,…
Вот запрос: Added where condition: class_key=msProduct, Data.old_price:>=Data.price,…
Попробуйте так написать where
'where' => ['Data.old_price:>' => 'Data.price', 'Data.internet_magazin' => '1']
Тот же резальтат. SQL-запрос генерится с условием
WHERE ( `msProduct`.`class_key` = 'msProduct' AND `Data`.`old_price` > 'Data.price' AND `Data`.`internet_magazin` = '1' AND `msProduct`.`parent` IN (21904, ...) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )
вот тут неправильно получается`Data`.`old_price` > 'Data.price'
а должно быть`Data`.`old_price` > `Data`.`price`
Если поменять руками запрос в PHPMySql, то всё работает, но как сделать так, чтобы сниппет msProducts эту часть правильно генерил? Кстати, есть вообще документация как правильно прописывать в сниппете условие where? Только не с типичными примерами, а что-то посложнее типа того что у меня
А если так:
'where' => ['Data.old_price > Data.price AND Data.internet_magazin = 1']
Да, так сработало! Спасибо огромное! получается, в where можно и просто готовое условие вписать… учтём
Да, можно писать чистый sql. Не за что, успехов
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.