pdoResources выводит Array если нечего выводить

MODX Revolution 2.5.7, pdoTools обновлен до последней версии 2.9.2-pl1.
Если результат выборки pdoResources пустой, то он пишет Array, в других случаях все работает нормально. Как можно исправить этот баг?
Vladimir
06 сентября 2017, 04:13
modx.pro
3 241
0

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

Михаил
06 сентября 2017, 07:33
0
Попробуй поставить чанк пустой и при нулевой выборке, глянь что выводит
    Vladimir
    06 сентября 2017, 07:38
    0
    Тоже самое — Array
      Михаил
      06 сентября 2017, 07:53
      0
      Покажите вызов
        Vladimir
        06 сентября 2017, 08:00
        0
        [[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`
        ]]
          Михаил
          06 сентября 2017, 09:16
          0
          А если вызвать не кэшированным
          [[!pdoResources]]
            Vladimir
            06 сентября 2017, 09:20
            0
            Ничего не меняется, я нашел похожий вопрос
            modx.pro/help/10158/
            но там более старая версия компонентов и причины/решения не описаны
              Олег
              06 сентября 2017, 12:12
              0
              Я бы отсек все лишние параметры — оставил только resources, tpl.
              При пустом выводе такая же проблема?
              Еще смущает parents = -1 и параметр sortby.
              В sortby, мне кажется, достаточно написать id.
                Vladimir
                06 сентября 2017, 15:12
                0
                без лишних параметров все нормально, но они нужны.
                parents = -1 — фактически тоже что и 0
                &sortby=`FIELD(modResource.id, [[*dynamic_elements_self]] )`
                — позволяет отсортировать в том порядке, в каком id указаны в плейсхолдере
    Володя
    06 сентября 2017, 12:41
    +2
    а включить showLog и посмотреть в чем дело религия не позволяет?
      Vladimir
      06 сентября 2017, 15:16
      0
      В логах видно что пустое значение вызывает ошибку 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
        Алексей Ерохин
        06 сентября 2017, 16:29
        0
        Либо не вызывайте сниппет, если tv пустая, либо откажитесь от такой сортировки.

        вроде если указать пустую сортировку &sortby=``, то выведется в том же порядке. что указаны в resources
        Николай Савин
        06 сентября 2017, 22:24
        0
        Вы можете написать условие проверки перед вызовом сниппета. Если значение 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`
        ]]
        `]]
          Максим Кузнецов
          06 сентября 2017, 23:29
          0
          За такие примеры MODX Revo, в свое время, и называли «тормознутным»: с таким вызовом выполнятся оба сниппета, вне зависимости от значения тв.
            Николай Савин
            07 сентября 2017, 00:15
            0
            Я примерную логику написал не проверяя, навскидку.
            Ясное дело, что подобный механизм нужно через fenom делать, либо через сниппет обертку.
              Андрей
              07 сентября 2017, 00:53
              0
              Можно на феном перевести, если не ошибаюсь, то будет выполняться только то, что соответствует условию.
                Олег
                11 сентября 2017, 11:14
                0
                Я проверял, в феноме точно также выполнялись оба сниппета.
                В такой ситуации я параметры сниппета записываю как массив, подставляя туда нужные параметры, потом вызываю сниппет через феном с указанием массива.
              Володя
              07 сентября 2017, 07:05
              +3
              проще наверно уж тогда
              &sortby=`FIELD(modResource.id, [[*dynamic_elements_self:empty=`-0`]])`
              &resources=`[[*dynamic_elements_self:empty=`-0`]]`
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              17