pdoResources выводит Array если нечего выводить
MODX Revolution 2.5.7, pdoTools обновлен до последней версии 2.9.2-pl1.
Если результат выборки pdoResources пустой, то он пишет Array, в других случаях все работает нормально. Как можно исправить этот баг?
Если результат выборки pdoResources пустой, то он пишет Array, в других случаях все работает нормально. Как можно исправить этот баг?
Комментарии: 17
Попробуй поставить чанк пустой и при нулевой выборке, глянь что выводит
Тоже самое — Array
Покажите вызов
[[pdoResources?
&parents=`-1`
&resources=`[[*dynamic_elements_self]]`
&sortby=`FIELD(modResource.id, [[*dynamic_elements_self]] )`
&sortdir=`ASC`
&limit=`15`
&tpl=`DynamicElementBlokWrapperTpl`
&includeContent=`1`
&showHidden=`1`
&showUnpublished=`1`
&context=`web,isbms,itbms,smms,tsms,twms`
&includeTVs=`image,content_layout,dynamic_elements_self`
]]
А если вызвать не кэшированным
[[!pdoResources]]
Ничего не меняется, я нашел похожий вопрос
modx.pro/help/10158/
но там более старая версия компонентов и причины/решения не описаны
modx.pro/help/10158/
но там более старая версия компонентов и причины/решения не описаны
Я бы отсек все лишние параметры — оставил только resources, tpl.
При пустом выводе такая же проблема?
Еще смущает parents = -1 и параметр sortby.
В sortby, мне кажется, достаточно написать id.
При пустом выводе такая же проблема?
Еще смущает parents = -1 и параметр sortby.
В sortby, мне кажется, достаточно написать id.
без лишних параметров все нормально, но они нужны.
parents = -1 — фактически тоже что и 0
parents = -1 — фактически тоже что и 0
&sortby=`FIELD(modResource.id, [[*dynamic_elements_self]] )`
— позволяет отсортировать в том порядке, в каком id указаны в плейсхолдере
а включить showLog и посмотреть в чем дело религия не позволяет?
В логах видно что пустое значение вызывает ошибку SQL, но раньше все было также и ничего не выводилось
0.0000889: pdoTools loaded
0.0000231: xPDO query object created
0.0005150: Included list of tvs: content_layout, dynamic_elements_self, image
0.0002019: leftJoined modTemplateVarResource as TVcontent_layout
0.0001800: leftJoined modTemplateVarResource as TVdynamic_elements_self
0.0001850: leftJoined modTemplateVarResource as TVimage
0.0001819: 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.0000079: Added selection of modTemplateVarResource: IFNULL(`value`, 'one-column') AS `tv.content_layout`
0.0000050: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.dynamic_elements_self`
0.0000050: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.image`
0.1769841: Processed additional conditions
0.1773801: Added where condition: modResource.parent:IN(1,3,2,5,6,843,4,7,8,9,11,12,13,18,16,17,15,14,387,386,763,20,795,796,847,19,428,430,431,736,33,34,35,733,133,134,135,136,137,138,355,356,357,333,367,368,369,370,371,372,254,255,268,269,139,140,141,142,143,144,359,360,361,362,373,374,375,376,377,378,256,257,270,271,145,146,147,148,149,150,363,364,365,366,379,380,381,382,383,384,258,259,272,734,735,21,22,23,24,25,26,27,28,29,30,31,32,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,43,44,45,46,778,47,781,48,221,222,223,224,779,780,225,226,782,783,844,845,732,10,846,789,36,37,38,39,40,41,151,152,153,154,155,156,157,158,159,160,161,162,769,192,191,190,197,196,189,188,187,186,185,184,183,182,181,180,179,195,178,194,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,193,765,767,199,198,219,218,220,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,274,275,276,277,278,279,280,281,771,772,282,758,49,50,51,52,53,54,56,57,726,739,227,229,261,264,260,262,729,263,265,730,267,266,55,250,249,848,248,247,246,245,243,244,766,768,242,241,240,239,238,237,236,235,234,233,232,231,230,251,252,253,740,760,741,742,743,744,746,747,748,749,750,751,752,753,754,755,756,757,761,745,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,737,759,58,59,61,60,62,64,63,425,101,95,96,97,98,99,102,426,385,100,455,461,65,66,334,332,335,72,70,354,68,69,358,784,73,74,454,77,81,331,78,725,427,785,786,787,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,353,71,352,79,762,842,80,82,791,792,793,794,76,727,728,336,75,790,83,84,464,87,88,89,770,466,457,465,459,458,724,764,788,91,94,93,90,92,463,86,67,460,553,85,456,330), modResource.parent:NOT IN(1,20,795,796,847,19,428,430,431,736), modResource.deleted=0, modResource.context_key:IN(web,isbms,itbms,smms,tsms,twms)
0.0001659: Replaced TV conditions
0.0002711: Sorted by FIELD(modResource.id, ), ASC
0.0000041: Limited to 15, offset 0
0.0003250: 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(`TVcontent_layout`.`value`, 'one-column') AS `tv.content_layout`, IFNULL(`TVdynamic_elements_self`.`value`, '') AS `tv.dynamic_elements_self`, IFNULL(`TVimage`.`value`, '') AS `tv.image` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVcontent_layout` ON `TVcontent_layout`.`contentid` = `modResource`.`id` AND `TVcontent_layout`.`tmplvarid` = 144 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVdynamic_elements_self` ON `TVdynamic_elements_self`.`contentid` = `modResource`.`id` AND `TVdynamic_elements_self`.`tmplvarid` = 132 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVimage` ON `TVimage`.`contentid` = `modResource`.`id` AND `TVimage`.`tmplvarid` = 5 WHERE ( `modResource`.`parent` IN (1,3,2,5,6,843,4,7,8,9,11,12,13,18,16,17,15,14,387,386,763,20,795,796,847,19,428,430,431,736,33,34,35,733,133,134,135,136,137,138,355,356,357,333,367,368,369,370,371,372,254,255,268,269,139,140,141,142,143,144,359,360,361,362,373,374,375,376,377,378,256,257,270,271,145,146,147,148,149,150,363,364,365,366,379,380,381,382,383,384,258,259,272,734,735,21,22,23,24,25,26,27,28,29,30,31,32,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,43,44,45,46,778,47,781,48,221,222,223,224,779,780,225,226,782,783,844,845,732,10,846,789,36,37,38,39,40,41,151,152,153,154,155,156,157,158,159,160,161,162,769,192,191,190,197,196,189,188,187,186,185,184,183,182,181,180,179,195,178,194,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,193,765,767,199,198,219,218,220,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,274,275,276,277,278,279,280,281,771,772,282,758,49,50,51,52,53,54,56,57,726,739,227,229,261,264,260,262,729,263,265,730,267,266,55,250,249,848,248,247,246,245,243,244,766,768,242,241,240,239,238,237,236,235,234,233,232,231,230,251,252,253,740,760,741,742,743,744,746,747,748,749,750,751,752,753,754,755,756,757,761,745,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,737,759,58,59,61,60,62,64,63,425,101,95,96,97,98,99,102,426,385,100,455,461,65,66,334,332,335,72,70,354,68,69,358,784,73,74,454,77,81,331,78,725,427,785,786,787,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,353,71,352,79,762,842,80,82,791,792,793,794,76,727,728,336,75,790,83,84,464,87,88,89,770,466,457,465,459,458,724,764,788,91,94,93,90,92,463,86,67,460,553,85,456,330) AND `modResource`.`parent` NOT IN (1,20,795,796,847,19,428,430,431,736) AND `modResource`.`deleted` = 0 AND `modResource`.`context_key` IN ('web','isbms','itbms','smms','tsms','twms') ) ORDER BY FIELD(modResource.id, ) ASC LIMIT 15 "
0.0008149: Could not process query, error #1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ASC LIMIT 15' at line 1
0.1803348: Total time
10 485 760: Memory usage
Либо не вызывайте сниппет, если tv пустая, либо откажитесь от такой сортировки.
вроде если указать пустую сортировку &sortby=``, то выведется в том же порядке. что указаны в resources
вроде если указать пустую сортировку &sortby=``, то выведется в том же порядке. что указаны в resources
Вы можете написать условие проверки перед вызовом сниппета. Если значение TV по которому сортируете не пустое, вызывать то что есть сейчас. Если значение TV пустое вызывать сниппет с сортировкой просто по ModResource.id
Что то вроде этого
Что то вроде этого
[[*dynamic_elements_self:is=``:then=`
[[pdoResources?
&parents=`-1`
&sortby=`modResource.id`
&sortdir=`ASC`
&limit=`15`
&tpl=`DynamicElementBlokWrapperTpl`
&includeContent=`1`
&showHidden=`1`
&showUnpublished=`1`
&context=`web,isbms,itbms,smms,tsms,twms`
&includeTVs=`image,content_layout,dynamic_elements_self`
]]
`:else=`
[[pdoResources?
&parents=`-1`
&resources=`[[*dynamic_elements_self]]`
&sortby=`FIELD(modResource.id, [[*dynamic_elements_self]] )`
&sortdir=`ASC`
&limit=`15`
&tpl=`DynamicElementBlokWrapperTpl`
&includeContent=`1`
&showHidden=`1`
&showUnpublished=`1`
&context=`web,isbms,itbms,smms,tsms,twms`
&includeTVs=`image,content_layout,dynamic_elements_self`
]]
`]]
За такие примеры MODX Revo, в свое время, и называли «тормознутным»: с таким вызовом выполнятся оба сниппета, вне зависимости от значения тв.
Я примерную логику написал не проверяя, навскидку.
Ясное дело, что подобный механизм нужно через fenom делать, либо через сниппет обертку.
Ясное дело, что подобный механизм нужно через fenom делать, либо через сниппет обертку.
Можно на феном перевести, если не ошибаюсь, то будет выполняться только то, что соответствует условию.
Я проверял, в феноме точно также выполнялись оба сниппета.
В такой ситуации я параметры сниппета записываю как массив, подставляя туда нужные параметры, потом вызываю сниппет через феном с указанием массива.
В такой ситуации я параметры сниппета записываю как массив, подставляя туда нужные параметры, потом вызываю сниппет через феном с указанием массива.
проще наверно уж тогда
&sortby=`FIELD(modResource.id, [[*dynamic_elements_self:empty=`-0`]])`
&resources=`[[*dynamic_elements_self:empty=`-0`]]`
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.