pdoResources отфильтровать значения в интервале
Всем привет!
Если кто знает, подскажите, пожалуйста, как отфильтровать товары по цене в конкретном диапазоне.
Какое условие надо написать в &where?
К примеру, tv с ценой называется price. Требуется вывести товары в диапазоне от 1000 до 5000 рублей.
Вызов делаю в сниппете, пишу:
Пробовал
Если кто знает, как заставить условие работать, буду признателен за помощь.
Если кто знает, подскажите, пожалуйста, как отфильтровать товары по цене в конкретном диапазоне.
Какое условие надо написать в &where?
К примеру, tv с ценой называется price. Требуется вывести товары в диапазоне от 1000 до 5000 рублей.
Вызов делаю в сниппете, пишу:
...
'includeTVs' => 'price',
'where' => '{"price:>":1000,"price:<=":5000}'
...
Но так не работает. Пробовал
'where' => '{"price:>":1000,"AND:price:<=":5000}'
И так не работает.Если кто знает, как заставить условие работать, буду признателен за помощь.
Комментарии: 21
ну я с ходу могу назвать два варианта, либо тебе нужно написать условие через phx фильтры или сниппет if или воспользоваться более элегантным вариантом minishop2.com/msearch2.html
minishop2.com/msearch2.html хорош, но платный, клиент не будет раскошеливаться на него. К тому же с ним еще разбираться и разбираться, а время поджимает.
&where=`{"price:>":"13000","price:<=":"15000"}`
&where=`["`TVprice`.`value` BETWEEN 13000 and 15000"]`
&where=`{"price:>":"13000","price:<=":"15000"}`
все также не работает, а &where=`["`TVprice`.`value` BETWEEN 13000 and 15000"]`
не очень подходит, т.к. нужны операторы для конкретного указания, где >, а где >=, и соответственно < и <=.
покажи весь вызов
$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;
Вот так все делаю, по идее правильно.
ну да, вроде все правильно. проверь точно тут ищешь?
'parents' => 10,
да точно :) и в других разделах искал, везде одна картина.
В общем, в связи с отсутствием времени, ибо заказчик требует сайт, перешел на getProducts и с ним все сделал. Там фильтрация делается следующим образом:
P.S.
Кстати, в pdoResources тоже есть параметр 'tvFilters', но вызов его по аналогии с getProducts у меня результата не дал.
В общем, в связи с отсутствием времени, ибо заказчик требует сайт, перешел на getProducts и с ним все сделал. Там фильтрация делается следующим образом:
'tvFilters' => '{"price:>=,<=:AND":[1000,5000]}'
Может Василий, когда из отпуска вернется, прояснит, как нужно делать подобную фильтрацию.P.S.
Кстати, в pdoResources тоже есть параметр 'tvFilters', но вызов его по аналогии с getProducts у меня результата не дал.
да как бы вызов правильный и не думаю что тут есть с чем разбираться… где то что то проглядел скорее всего.
Вероятно, но в pdoResources у меня даже простейшая фильтрация
&where=`{"price:>":"1000"}
не работает.
Может нужно было сделать так
&where=`{"tv.price:>":"1000"}
Точно не знаю, потому что я на TV префиксы выключаю обычно
Спасибо всем, кто потратил время и ответил мне!
у меня кстати pdoResources и многие сниппеты Безумкина не работают на локальном сервере, я заметил это недавно пока не разобрался, попробуй затестить свою выборку на тестовом сайте test.modx.pro/
Ради интереса потестирую на test.modx.pro/ как время появится, спасибо за совет,
но вообще сайт сразу на рабочем VPS разрабатывается и находится, так что все должно по идее работать.
но вообще сайт сразу на рабочем VPS разрабатывается и находится, так что все должно по идее работать.
вы можете попробовать сейчас, код у вас есть а все остальное там генерируется очень быстро
Попробуйте так:
&where=`{
"Data.price:>=":1000,
"Data.price:<=":5000
}`
Идентичная проблема, как я только не пытался, причем через between работает, а вот &where=`{«price:>»:«1000»} не хочет работать
Вот была бы такая функция, чтобы взять и посмотреть, какой генерируется SQL и понять, где ошибка…
А, стоп, она же есть с самой первой версии!
А, стоп, она же есть с самой первой версии!
&showLog=`1`
А вот и логи подоспели
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}`
]]
к предыдущему посту:
[[!pdoResources?
&parents=`[[*id]]`
&includeTVs=`price,img`
&includeContent=`1`
&limit=`10`
&tpl=`event.tpl`
&showLog=`1`
&where=`{"price:>":1000, "template":8}`
]]
… плюнул, сделал через getProducts: «price:>=,<=:AND»:[0,1000] ну и по аналогии
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.