[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" }]'
]}
Вот такая конструкция всё равно выводит любые товары. Или я вообще неправильно пытаюсь решить эту задачу? А как тогда надо?
Заранее спасибо за подсказку
Giant Dad
29 мая 2023, 16:45
modx.pro
729
0

Комментарии: 9

Андрей
29 мая 2023, 16:58
0
А что за поле — Data.internet_magazin? Можно включить параметр showLog и посмотреть какой запрос формируется.
    Андрей
    29 мая 2023, 17:10
    0
    p.s. Проверил у себя, условие в where рабочее:
    {'!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 это твшка, опция, тогда надо по другому запрос переписать.
      Giant Dad
      30 мая 2023, 18:11
      0
      internet_magazin — это свойство товара, расширенное вручную, не через msAddField
        Giant Dad
        31 мая 2023, 12:33
        0
        Копирую ваш вариант, естественно со своими родителями, выдаёт всё равно все товары подряд и со скидкой и без. Если убрать условие по свойству internet_magazin, то выдаёт то же самое, все товары.
        Вот запрос: Added where condition: class_key=msProduct, Data.old_price:>=Data.price,…
          Dan
          Dan
          31 мая 2023, 12:49
          0
          Попробуйте так написать where
          'where' => ['Data.old_price:>' => 'Data.price', 'Data.internet_magazin' => '1']
            Giant Dad
            31 мая 2023, 13:12
            0
            Тот же резальтат. 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? Только не с типичными примерами, а что-то посложнее типа того что у меня
              Dan
              Dan
              31 мая 2023, 13:23
              2
              +1
              А если так:
              'where' => ['Data.old_price > Data.price AND Data.internet_magazin = 1']
                Giant Dad
                31 мая 2023, 13:25
                0
                Да, так сработало! Спасибо огромное! получается, в where можно и просто готовое условие вписать… учтём
                  Dan
                  Dan
                  31 мая 2023, 13:26
                  0
                  Да, можно писать чистый sql. Не за что, успехов
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9