Не могу составить запрос where в PdoResources. Pdoresources where modx
Документация по pdoResources
Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для getResources: обладает всеми его возможностями, но лишен недостатков.
Умеет правильно сортировать ТВ параметры, присоединять таблицы при выборке, включать и исключать категории из разных контекстов и еще много чего.
Параметры
Параметры выборки ресурсов
Эти параметры определяют, какие ресурсы появятся в генерируемом списке.
&parents | Текущий ресурс | Список родителей, через запятую, для поиска результатов. Если поставить 0 - выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&depth | 10 | Глубина поиска дочерних ресурсов от родителя. |
&resources | ||
&context | Ограничение выборки по контексту ресурсов. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&showHidden | 1 | Показывать ресурсы, скрытые в меню. |
&showUnpublished | 0 | Показывать неопубликованные ресурсы. |
&showDeleted | 0 | Показывать удалённые ресурсы. |
&hideContainers | 0 | Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1». |
&select | 0 | Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {"modResource":"id,pagetitle,content"}. |
&sortby | pagetitle | Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей, например {"tvname":"ASC", "pagetitle":"DESC"}. Для случайно сортировки укажите «RAND()» |
&sortdir | DESC | Направление сортировки: по убыванию или возрастанию. |
&limit | 10 | Ограничение количества результатов выборки. Можно использовать «0». |
&offset | 0 | Пропуск результатов от начала. |
&first | 1 | Номер первой итерации вывода результатов. |
&last | Автоматически, по формуле (total + first - 1) | Номер последней итерации вывода результатов. |
&loadModels | Список компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например: &loadModels=`ms2gallery,msearch3`. | |
&tvFilters | Список фильтров по ТВ, с разделителями AND и OR. Разделитель, указанный в параметре &tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их &tvFiltersAndDelimiter. Поиск значений может проводиться в каком-то конкретном ТВ, если он указан «myTV==value», или в любом «value». Пример вызова: &tvFilters=`filter2==one,filter1==bar%||filter1==foo`. Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ. | |
&tvFiltersAndDelimiter | "," | Разделитель для условий AND в параметре &tvFilters. |
&tvFiltersOrDelimiter | "||" | Разделитель для условий OR в параметре &tvFilters. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации вывода, то есть отвечают за внешний вид.
&returnIds | Установите значение «1», чтобы вернуть строку со списком id ресурсов, вместо оформленных результатов. Все указанные шаблоны игнорируются. |
&tpl | Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран. |
&tplFirst | Имя чанка для первого ресурса в результатах. |
&tplLast | Имя чанка для последнего ресурса в результатах. |
&tplOdd | Имя чанка для каждого второго ресурса. |
&tplWrapper | Чанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: . Не работает вместе с параметром &toSeparatePlaceholders. |
&wrapIfEmpty | Включает вывод чанка-обертки &tplWrapper даже если результатов нет. |
&tplCondition | Поле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls. |
&tplOperator | Необязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls. |
&conditionalTpls | JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях - чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей. |
&outputSeparator | Необязательная строка для разделения результатов работы. |
Параметры результатов
Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.
&fastMode | 0 | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. |
&idx | Вы можете указать стартовый номер итерации вывода результатов. | |
&totalVar | total | Имя плейсхолдера для сохранения общего количества результатов. |
&includeContent | 0 | Включаем поле «content» в выборку. |
&includeTVs | Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры и . | |
&prepareTVs | «1», что означает подготовку всех ТВ, указанных в &includeTVs | Список ТВ параметров, которые нужно подготовить перед выводом. |
&processTVs | Список ТВ параметров, которые нужно обработать перед выводом. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. | |
&tvPrefix | tv. | Префикс для ТВ параметров. |
&useWeblinkUrl | Генерировать ссылку с учетом класса ресурса, включает плейсхолдер . | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. | |
&toSeparatePlaceholders | Если вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры , и т.д. | |
&showLog | 0 | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr». |
Примеры
Простейший вывод списка дочерних ресурсов документа с идентификатором 1:
[[pdoResources? &parents=`1` &depth=`0` &tpl=`ListRowTpl` ]]Если используется дополнительное поле image, то вызов изменится следующим образом:
[[pdoResources? &parents=`1` &depth=`0` &tpl=`ListRowTpl` &includeTVs=`image` ]]В чанке ListRowTpl за это поле будет отвечать плейсхолдер [[+tv.image]]
Дополнительная информация
При переносе чанков с getResources, довольно распространённой ошибкой является использование модификатора strtotime, для форматирования даты.
Дело в том, что даты ресурсов и так хранятся в виде timestamp, но конвертируются в нормальные даты из-за использования объектов modResource - так запрограммировано в его свойствах. А потом, для форматирования даты, их нужно перевести обратно в timestamp. Выходит двойная ненужная конвертация.
pdoTools же работает напрямую с базой данных, без создания объектов и конвертации их значений, поэтому в чанк приходит timestamp, который не нужно дополнительно обрабатывать. Вы можете сразу применять модификатор date к значениям:
[[+publishedon:date=`%d.%m.%Y`]] или [[+createdon:date=`%Y-%m-%d`]]Это касается работы с датами ресурсов и в других сниппетах pdoTools.
Голосов: 38 | Просмотров: 416
proweb63.ru
Как составить выборку where в pdoResources modx revo? — Toster.ru
Добрый день, подскажите пожалуйста как мне составить выборку по ТВ таким образом чтобы я мог выводить на странице только те ресурсы которые соответствуют полям , так же мне нужно указывать несколько значений в одном ТВ параметре , например цена 4000,5000,7000 вот мой код [[!pdoPage? &element=`pdoResources` &tpl=`zayavka_block` &parents=`1` &tplPageActive=`@INLINE<li><a href="[[+href]]">[[+pageNo]]</a></li>` &cache=`1` &cacheTime=`1800` &includeTVs=`metro,img,price_do,price_ot,street,area,price,object_id,kavdrat_ot,kavdrat_do,okrug` &hideContainers=`1` &where=`{"metro:IN":[ [[*svod_metro]] ]}` &maxLimit=`9` &showLog=`1` ]]Не могу составить запрос where в PdoResources / modx.pro
Хочу выводить на каждой странице похожие материалы-миниатюры страниц, которые я сам укажу в дополнительном поле. Соответственно создал дополнительное поле(checkbox) и вывел в возможные значения все нужные страницы. Теперь вызываю PdoResources. Значение view_page включает в себя заголовки страниц (Инженерные работыО насЧип-тюнинг). Соответственно мне нужно выбрать страницы, которые встречаются поле view_page текущей страницы.[[pdoResources? &tpl=`menu2_1` &limit=`0` &depth=`5` &parents=`8` &select=`pagetitle` &includeTVs=`kart,text_ca,zag` &showLog=`1` &where=`{"[[*view_page]]:LIKE":"%[[+pagetitle]]%"}` ]]Проблема кажется из за того что не подставляются значения [[+pagetitle]]. Вот лог 0.0001440: pdoTools loaded 0.0000319: xPDO query object created 0.0004199: Included list of tvs: kart, text_ca, zag 0.0003679: leftJoined modTemplateVarResource as TVkart 0.0003090: leftJoined modTemplateVarResource as TVtext_ca 0.0003059: leftJoined modTemplateVarResource as TVzag 0.0001671: Added selection of modResource: SQL_CALC_FOUND_ROWS `pagetitle` 0.0000100: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.kart` 0.0000072: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.text_ca` 0.0000072: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.zag` 0.0000670: Replaced TV conditions 0.0006969: Processed additional conditions 0.0011878: Added where condition: Инженерные работыО насЧип-тюнинг:LIKE=%%, modResource.parent:IN(8,84,85,10,95,110,97,98,86,89,90,93,88,87,9,83,99,100,101,102,105,106,107,108,103,104,111,113,128,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127), modResource.published=1, modResource.deleted=0 0.0000348: Replaced TV conditions 0.0001581: Sorted by modResource.publishedon, DESC 0.0002868: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`pagetitle`, IFNULL(`TVkart`.`value`, '') AS `tv.kart`, IFNULL(`TVtext_ca`.`value`, '') AS `tv.text_ca`, IFNULL(`TVzag`.`value`, '') AS `tv.zag` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVkart` ON `TVkart`.`contentid` = `modResource`.`id` AND `TVkart`.`tmplvarid` = 23 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVtext_ca` ON `TVtext_ca`.`contentid` = `modResource`.`id` AND `TVtext_ca`.`tmplvarid` = 25 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVzag` ON `TVzag`.`contentid` = `modResource`.`id` AND `TVzag`.`tmplvarid` = 24 WHERE ( `modResource`.`Инженерные работыО насЧип-тюнинг` LIKE '%%' AND `modResource`.`parent` IN (8,84,85,10,95,110,97,98,86,89,90,93,88,87,9,83,99,100,101,102,105,106,107,108,103,104,111,113,128,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY modResource.publishedon DESC " 0.0005851: Could not process query, error #1054: Unknown column 'modResource.Инженерные работыО насЧип-тюнинг' in 'where clause' 0.0041020: Total time 7 077 888: Memory usagemodx.pro