Скрытие чанка при условии пустого TV

Хочу выводить чанк с похожими статьями только в случае, если у статьи указан хоть один тег. Если теги забыли указать например, то чанк не должен подтягиваться.

Делаю так
[[*tags:!empty=`
<p>Если TV tags не пустой, то выводит эту строку</p>
`]]
Но в эту конструкцию нельзя вставить вывод pdoResources.
Так уже не сработает :(
[[*tags:!empty=`
	[[!pdoResources?
    		&parents=`2`
    		&limit=`5`
    		&tpl=`tplArticleSim`
		]]		
`]]
Подскажите хоть куда копать для решения этой задачи?
Спасибо
Andrey
23 июля 2016, 19:26
modx.pro
3
8 020
+1

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

Andrey
23 июля 2016, 22:35
-2
немного поторопился с просьбой о помощи, но может кому полезно будет.

Если завернуть вывод pdoResources в отдельный чанк и затягивать уже чанк, то условие работает как надо

[[*tags:!empty=` 
	[[$similarArticles]]
`]]
    Владимир
    24 июля 2016, 00:39
    0
    Лучше результат pdoResources в плейсхолдер вместо чанка, а еще лучше феном вместо модификаторов.
      Павел Романов
      24 июля 2016, 10:46
      0
      В этом случае у Вас вызов будет работать даже при отсутствии тегов (MODX сделает выборку, а потом только выполнит условие).
      Действительно, лучше Fenom или на худой конец так:
      [[$[[*tags:!empty=`similarArticles`]]]]

      И кстати, в Вашем случае можете кешировать вызов pdoResources в чанке.
        Andrey
        24 июля 2016, 10:56
        0
        Подскажите, почему все таки лучше Fenom? я думал это простое решение, но судя по всему оно в чем то сильно проигрывает, раз советуете fenom
          Павел Романов
          24 июля 2016, 11:20
          1
          +3
          Парсер MODX работает таким образом, что сначала рендерит чанки, TV, сниппеты, в общем, всё, что есть на странице, а только потом выполняет условия и оставляет нужное.
          Соответственно, если Вы делаете так:
          [[*tv:!empty=`[[$chunk]]`]]
          то MODX сначала выполнит все, что в чанке, а только потом решит выводить его на страницу или нет.
          В любом случае ресурсы уже потрачены. А если таких условий в шаблоне несколько. то тромоза все более и более ощутимы.

          Если же сделать так:
          [[$[[*tv:!empty=`chunk`]]]]
          то MODX отрендерит просто текст «chunk» и потом, если условие выполнено, оставит его, а тут уже получится тег, который обработается:
          [[$chunk]]

          В случае невыполнения условия выведется просто
          [[$]]

          Fenom же работает по-другому. Он изначально рендерит только то, что соответствует условию.
          В Вашем случае будет так:
          {if $_modx->resource.tags != ''}
              {$_modx->runSnippet('pdoResources', [
              'parents' => 2,
              'limit' => 5,
              'tpl' => 'tplArticleSim'
              ])}
          {/if}

          Ну или так, если угодно:
          {if $_modx->resource.tags != ''}
              {$_modx->getChunk('similarArticles')}
          {/if}

          Или вообще так ):
          {if $_modx->resource.tags != ''}
              [[pdoResources?
              &parents=`2`
              &limit=`5`
              &tpl=`tplArticleSim`
              ]]
          {/if}
            Andrey
            24 июля 2016, 13:41
            0
            спасибо за детальное пояснение
              Andrey
              24 июля 2016, 18:38
              -1
              Подстановка ваших решений ни в одном из случаев не сработала. Хоть Fenom хоть нет.
              Что я делаю не так? Особенно это касается Fenom, что нужно для его работы, в настройках что-то указать?
                Павел Романов
                24 июля 2016, 19:10
                0
                Если Вы выводите условия на странице, то нужно включить параметр pdotools_fenom_parser в настройках pdoTools (в системных настройках).
                  Andrey
                  24 июля 2016, 19:30
                  0
                  угу, туда и полез согласно документации. Включал ДА у
                  pdotools_fenom_default
                  pdotools_fenom_parser
                  Потом вашу конструкцию вставляю в шаблон (может в этом дело), и в чанк вашу конструкцию вставлял, но на странице просто текстом выводится ваша конструкция :(
                    Владимир
                    24 июля 2016, 21:16
                    0
                    … надо искать, например, не относящиеся к феному фигурные скобки {} и «взять их» в тег
                    <ignore></ignore>
                    или проставить пробелы после скобки.
                    То что вам предложили не может не работать.
                      Павел Романов
                      24 июля 2016, 21:20
                      0
                      Смотрите лог ошибок. Буквально вчера обсуждали.
                        Andrey
                        24 июля 2016, 22:06
                        0
                        Я понимаю, что туплю или у меня где-то ошибка. но я просто хочу разобраться, а не получается. Я беру код Павла и вставляю его в шаблон.
                        {if $_modx->resource.tags != ''}
                            [[pdoResources?
                            &parents=`2`
                            &limit=`5`
                            &tpl=`tplArticleSim`
                            &showLog=`1`
                            ]]
                        {/if}
                        Там даже ошибаться негде. Он же должен отрабатывать! нет тегов, ничего не выводить. Есть теги — 5 статей вывести. А он выводит 5 статей хоть так хоть так. Конструкция {if $_modx->resource.tags != ''}{/if} выводится просто текстом.

                        Ну явно же Fenom не работает.

                        вот логи
                        0.0003321: pdoTools loaded
                        0.0001020: xPDO query object created
                        0.0010121: 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`, `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.0014219: Processed additional conditions
                        0.0022531: Added where condition: modResource.parent:IN(2,8,9,10,24,25,38,26,37,41,43,44), modResource.published=1, modResource.deleted=0
                        0.0002389: Sorted by modResource.publishedon, DESC
                        0.0000122: Limited to 5, offset 0
                        0.0007110: 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`.`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` FROM `basepref_site_content` AS `modResource` WHERE  ( `modResource`.`parent` IN (2,8,9,10,24,25,38,26,37,41,43,44) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY modResource.publishedon DESC LIMIT 5 "
                        0.0014598: SQL executed
                        0.0001969: Total rows: 8
                        0.0002079: Rows fetched
                        0.0030160: Loaded chunk "tplArticleSim"
                        0.0119479: Returning processed chunks
                        0.0192461: Total time
                        10 485 760: Memory usage
                        Ладно, понимаю, утомил. Если нет соображений почему fenom не работает, то можете не отвечать. Как-нибудь в другой раз попытаюсь разобраться на новом сайте с нуля.
                          Павел Романов
                          24 июля 2016, 23:29
                          +1
                          Смотрите лог не pdoResources, а лог MODX (...../core/cache/logs/error.log).
                          Там будет что-нибудь типа:
                          [2016-07-24 23:23:54] (ERROR @ .........../core/components/pdotools/model/pdotools/pdotools.class.php : 940) 
                          Unexpected tag '******' in a0c869550ea492457a960cab7e3b434a line 81, 
                          near '{******' <- there

                          Найдите этот самый {****** и просто добавьте пробел после первой фигурной скобки.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          13