pdoResources отфильтровать значения в интервале

Всем привет!
Если кто знает, подскажите, пожалуйста, как отфильтровать товары по цене в конкретном диапазоне.
Какое условие надо написать в &where?
К примеру, tv с ценой называется price. Требуется вывести товары в диапазоне от 1000 до 5000 рублей.
Вызов делаю в сниппете, пишу:
...
'includeTVs' => 'price',
'where' => '{"price:>":1000,"price:<=":5000}'
...
Но так не работает.
Пробовал
'where' => '{"price:>":1000,"AND:price:<=":5000}'
И так не работает.

Если кто знает, как заставить условие работать, буду признателен за помощь.
Игорь
24 июня 2014, 12:24
modx.pro
3
6 849
0

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

Сергей Скат
24 июня 2014, 21:23
0
ну я с ходу могу назвать два варианта, либо тебе нужно написать условие через phx фильтры или сниппет if или воспользоваться более элегантным вариантом minishop2.com/msearch2.html
    Игорь
    25 июня 2014, 08:52
    0
    minishop2.com/msearch2.html хорош, но платный, клиент не будет раскошеливаться на него. К тому же с ним еще разбираться и разбираться, а время поджимает.
    Володя
    24 июня 2014, 21:42
    0
    &where=`{"price:>":"13000","price:<=":"15000"}`
    &where=`["`TVprice`.`value` BETWEEN 13000 and 15000"]`
      Игорь
      25 июня 2014, 08:59
      0
      &where=`{"price:>":"13000","price:<=":"15000"}`
      все также не работает, а
      &where=`["`TVprice`.`value` BETWEEN 13000 and 15000"]`
      не очень подходит, т.к. нужны операторы для конкретного указания, где >, а где >=, и соответственно < и <=.
        Володя
        25 июня 2014, 09:35
        0
        покажи весь вызов
          Игорь
          25 июня 2014, 10:06
          0
          $config = array(
              'parents' => 10,
              'depth' => 1,
              'limit' => 6,
              'maxLimit' => 1000,
              'pageLimit' => 15,
              'sortby' => '{"parent":"ASC","menuindex":"DESC"}',
              'includeContent' => 0,
              'includeTVs' => 'video,price,oldPrice,effect1,effect2,effect3,in_stock,rating,caliber,time,height,shotCount,test_tv',
              'showHidden' => 0,
              'showUnpublished' => 0,
              'tpl' => 'catalog_item.tpl',
              'where' => '{"price:>":"1000","price:<=":"5000"}',
              'tplPageWrapper' => '@INLINE <ul class="catalog-page-list ajax-pagination">[[+prev]][[+pages]][[+next]]</ul>',
              'tplPage' => '@INLINE <li><a>[[+pageNo]]</a></li>',
              'tplPageActive' => '@INLINE <li><a class="active">[[+pageNo]]</a></li>',
              'tplPagePrev' => '@INLINE <li><a class="catalog-prev-link pagination-control"><img src="assets/site/img/prev-link-arrow.png" width="9" height="20" alt="link-arrow">Предыдущая страница</a></li>',
              'tplPageNext' => '@INLINE <li><a class="catalog-next-link pagination-control">Следующая страница<img src="assets/site/img/next-link-arrow.png" width="9" height="20" alt="link-arrow"></a></li>',
              'tplPagePrevEmpty' => '',
              'tplPageNextEmpty' => ''
          );
          
          $output = $modx->runSnippet('pdoPage', $config);
          $output = '<div id="catalog_output">'.$output.'<br class="clear"></div><div class="catalog-pagination">[[!+page.nav]]</div>';
          return $output;
          Вот так все делаю, по идее правильно.
            Володя
            25 июня 2014, 10:15
            0
            ну да, вроде все правильно. проверь точно тут ищешь?
            'parents' => 10,
              Игорь
              25 июня 2014, 10:30
              0
              да точно :) и в других разделах искал, везде одна картина.
              В общем, в связи с отсутствием времени, ибо заказчик требует сайт, перешел на getProducts и с ним все сделал. Там фильтрация делается следующим образом:
              'tvFilters' => '{"price:>=,<=:AND":[1000,5000]}'
              Может Василий, когда из отпуска вернется, прояснит, как нужно делать подобную фильтрацию.

              P.S.
              Кстати, в pdoResources тоже есть параметр 'tvFilters', но вызов его по аналогии с getProducts у меня результата не дал.
                Володя
                25 июня 2014, 10:41
                0
                да как бы вызов правильный и не думаю что тут есть с чем разбираться… где то что то проглядел скорее всего.
                  Игорь
                  25 июня 2014, 10:50
                  0
                  Вероятно, но в pdoResources у меня даже простейшая фильтрация
                  &where=`{"price:>":"1000"}
                  не работает.
                    Владимир Кисилица
                    12 июля 2016, 09:45
                    0
                    Может нужно было сделать так
                    &where=`{"tv.price:>":"1000"}
                    Точно не знаю, потому что я на TV префиксы выключаю обычно
      Игорь
      25 июня 2014, 10:50
      0
      Спасибо всем, кто потратил время и ответил мне!
        Сергей Скат
        25 июня 2014, 15:57
        0
        у меня кстати pdoResources и многие сниппеты Безумкина не работают на локальном сервере, я заметил это недавно пока не разобрался, попробуй затестить свою выборку на тестовом сайте test.modx.pro/
          Игорь
          25 июня 2014, 16:04
          0
          Ради интереса потестирую на test.modx.pro/ как время появится, спасибо за совет,
          но вообще сайт сразу на рабочем VPS разрабатывается и находится, так что все должно по идее работать.
            Сергей Скат
            25 июня 2014, 17:19
            0
            вы можете попробовать сейчас, код у вас есть а все остальное там генерируется очень быстро
        Evgeny Epifanov
        25 июня 2014, 17:16
        0
        Попробуйте так:
        &where=`{
                "Data.price:>=":1000,
                "Data.price:<=":5000
            }`
          Andrey Frost
          03 июля 2016, 09:08
          -2
          Идентичная проблема, как я только не пытался, причем через between работает, а вот &where=`{«price:>»:«1000»} не хочет работать
            Василий Наумкин
            03 июля 2016, 09:25
            +2
            Вот была бы такая функция, чтобы взять и посмотреть, какой генерируется SQL и понять, где ошибка…

            А, стоп, она же есть с самой первой версии!
            &showLog=`1`
            Andrey Frost
            03 июля 2016, 14:11
            0
            А вот и логи подоспели

            0.0001400: pdoTools loaded
            0.0000319: xPDO query object created
            0.0000739: Added TVs filters
            0.0006580: Included list of tvs: img, price
            0.0002649: leftJoined modTemplateVarResource as TVimg
            0.0002160: leftJoined modTemplateVarResource as TVprice
            0.0005009: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
            0.0000131: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.img`
            0.0000081: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.price`
            0.0002329: Replaced TV conditions
            0.0005319: Processed additional conditions
            0.0010822: Added where condition: template=8, 0={"`TVprice`.`value`:>":1000} LIKE '', modResource.parent:IN(36,53,50,49,52,48,12,51), modResource.published=1, modResource.deleted=0
            0.0000391: Replaced TV conditions
            0.0001550: Sorted by modResource.publishedon, DESC
            0.0000041: Limited to 10, offset 0
            0.0003619: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`content`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties`, IFNULL(`TVimg`.`value`, '') AS `tv.img`, IFNULL(`TVprice`.`value`, '') AS `tv.price` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVimg` ON `TVimg`.`contentid` = `modResource`.`id` AND `TVimg`.`tmplvarid` = 2 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVprice` ON `TVprice`.`contentid` = `modResource`.`id` AND `TVprice`.`tmplvarid` = 1 WHERE  ( `modResource`.`template` = 8 AND {"`TVprice`.`value`:>":1000} LIKE '' AND `modResource`.`parent` IN (36,53,50,49,52,48,12,51) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY modResource.publishedon DESC LIMIT 10 "
            0.0002401: Could not process query, error #: 
            0.0039048: Total time
            5 505 024: Memory usage
            … и сам вызов
            [[!pdoResources?
                              &parents=`[[*id]]`
                              &includeTVs=`price,img`
                              &includeContent=`1`
                              &limit=`10`
                              &tpl=`event.tpl`
                              &showLog=`1`
                              &tvFilters=`{"price:>":1000}`
                              &where=`{"template":8}`
                          ]]
              Andrey Frost
              04 июля 2016, 14:12
              0
              к предыдущему посту:

              [[!pdoResources?
                                &parents=`[[*id]]`
                                &includeTVs=`price,img`
                                &includeContent=`1`
                                &limit=`10`
                                &tpl=`event.tpl`
                                &showLog=`1`
                                &where=`{"price:>":1000, "template":8}`
                            ]]
                Andrey Frost
                12 июля 2016, 08:45
                0
                … плюнул, сделал через getProducts: «price:>=,<=:AND»:[0,1000] ну и по аналогии
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                21