Скрытие чанка при условии пустого TV
Хочу выводить чанк с похожими статьями только в случае, если у статьи указан хоть один тег. Если теги забыли указать например, то чанк не должен подтягиваться.
Делаю так
Так уже не сработает :(
Спасибо
Делаю так
[[*tags:!empty=`
<p>Если TV tags не пустой, то выводит эту строку</p>
`]]
Но в эту конструкцию нельзя вставить вывод pdoResources.Так уже не сработает :(
[[*tags:!empty=`
[[!pdoResources?
&parents=`2`
&limit=`5`
&tpl=`tplArticleSim`
]]
`]]
Подскажите хоть куда копать для решения этой задачи?Спасибо
Комментарии: 13
немного поторопился с просьбой о помощи, но может кому полезно будет.
Если завернуть вывод pdoResources в отдельный чанк и затягивать уже чанк, то условие работает как надо
Если завернуть вывод pdoResources в отдельный чанк и затягивать уже чанк, то условие работает как надо
[[*tags:!empty=`
[[$similarArticles]]
`]]
Лучше результат pdoResources в плейсхолдер вместо чанка, а еще лучше феном вместо модификаторов.
В этом случае у Вас вызов будет работать даже при отсутствии тегов (MODX сделает выборку, а потом только выполнит условие).
Действительно, лучше Fenom или на худой конец так:
И кстати, в Вашем случае можете кешировать вызов pdoResources в чанке.
Действительно, лучше Fenom или на худой конец так:
[[$[[*tags:!empty=`similarArticles`]]]]
И кстати, в Вашем случае можете кешировать вызов pdoResources в чанке.
Подскажите, почему все таки лучше Fenom? я думал это простое решение, но судя по всему оно в чем то сильно проигрывает, раз советуете fenom
Парсер MODX работает таким образом, что сначала рендерит чанки, TV, сниппеты, в общем, всё, что есть на странице, а только потом выполняет условия и оставляет нужное.
Соответственно, если Вы делаете так:
В любом случае ресурсы уже потрачены. А если таких условий в шаблоне несколько. то тромоза все более и более ощутимы.
Если же сделать так:
В случае невыполнения условия выведется просто
Fenom же работает по-другому. Он изначально рендерит только то, что соответствует условию.
В Вашем случае будет так:
Ну или так, если угодно:
Или вообще так ):
Соответственно, если Вы делаете так:
[[*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}
спасибо за детальное пояснение
Подстановка ваших решений ни в одном из случаев не сработала. Хоть Fenom хоть нет.
Что я делаю не так? Особенно это касается Fenom, что нужно для его работы, в настройках что-то указать?
Что я делаю не так? Особенно это касается Fenom, что нужно для его работы, в настройках что-то указать?
Если Вы выводите условия на странице, то нужно включить параметр pdotools_fenom_parser в настройках pdoTools (в системных настройках).
угу, туда и полез согласно документации. Включал ДА у
pdotools_fenom_default
pdotools_fenom_parser
Потом вашу конструкцию вставляю в шаблон (может в этом дело), и в чанк вашу конструкцию вставлял, но на странице просто текстом выводится ваша конструкция :(
pdotools_fenom_default
pdotools_fenom_parser
Потом вашу конструкцию вставляю в шаблон (может в этом дело), и в чанк вашу конструкцию вставлял, но на странице просто текстом выводится ваша конструкция :(
… надо искать, например, не относящиеся к феному фигурные скобки {} и «взять их» в тег
То что вам предложили не может не работать.
<ignore></ignore>
или проставить пробелы после скобки.То что вам предложили не может не работать.
Смотрите лог ошибок. Буквально вчера обсуждали.
Я понимаю, что туплю или у меня где-то ошибка. но я просто хочу разобраться, а не получается. Я беру код Павла и вставляю его в шаблон.
Ну явно же Fenom не работает.
вот логи
{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 не работает, то можете не отвечать. Как-нибудь в другой раз попытаюсь разобраться на новом сайте с нуля.
Смотрите лог не 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
Найдите этот самый {****** и просто добавьте пробел после первой фигурной скобки.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.