pdoResources с рекурсивным вызовом не работает
[[!pdoResources? &tpl=`service` &limit=`0` &depth=`0` &includeContent=`0` &sortby=`menuindex` &sortdir=`ASC`]]
[[pdoResources? &parents=`[[+id]]` &tpl=`service.in` &limit=`0` &depth=`0` &includeContent=`0` &sortby=`menuindex` &sortdir=`ASC`]]
Например для:
Папка 1
— ресурс 1
— ресурс 2
Папка 2
— ресурс 3
Результат будет следующим:
Автору готов предоставить доступ на сайт.
<h1>[[+pagetitle]]<h1>
Внутри чанка service вызывается еще раз:[[pdoResources? &parents=`[[+id]]` &tpl=`service.in` &limit=`0` &depth=`0` &includeContent=`0` &sortby=`menuindex` &sortdir=`ASC`]]
<h2>[[+pagetitle]]<h2>
При этом первый вызов срабатывает лишь раз все остальные ресурсы выводятся как результаты рекурсивного вызоваНапример для:
Папка 1
— ресурс 1
— ресурс 2
Папка 2
— ресурс 3
Результат будет следующим:
<h1>Папка 1</h1>
<h2>ресурс 1<h2>
<h2>ресурс 2<h2>
<h2>ресурс 3<h2>
<h2>Папка 2<h2>
PS: причем просто заменив pdoResources на getResources — все работает.Автору готов предоставить доступ на сайт.
Комментарии: 6
Ты не понимаешь, зачем нужен pdoResources, если пытаешься вызывать его рекурсивно. Суть его работы — выборка всех нужных данных за один запрос в БД.
P.S. И непонятно, зачем ты вызываешь его кэшированным в чанке. Это в любом случае, как то неправильно.
P.S. И непонятно, зачем ты вызываешь его кэшированным в чанке. Это в любом случае, как то неправильно.
Не совсем понял ответ.
В любом случае спасибо вам за огромный труд проделанный для сообщества!
Суть его работы — выборка всех нужных данных за один запрос в БД.Все равно не понятно почему он не верно срабатывает.
И непонятно, зачем ты вызываешь его кэшированным в чанке. Это в любом случае, как то неправильно.Я его и выше использую кешированным (На время теста просто не кешировал) не понимаю что тут может быть не правильного, а рекурсивный вызов все же иногда требуется, поэтому и решил отписать, мало ли кто еще решит так использовать.
В любом случае спасибо вам за огромный труд проделанный для сообщества!
Ты вызываешь его с параметром &depth=`0` — это значит, что первый же вызов сниппета выберет всех потомков.
Зачем еще у каждого потомка точно также вызывать сниппет? Включи showLog=`1` в чанке, увидишь сколько будет лишних запросов.
Ну и у меня на тестовом сайте все работает, как ты указал, что с кэшем, что без.
Первый вызов:
Чанк test
Результат
Видишь, что ресурсы выбраны 2 раза? Это из-за &depth=`0` при первом вызове. Лучше указать = 1 или вообще не страдать ерундой, а выбирать за 1 раз, без рекурсии в чанках.
Зачем еще у каждого потомка точно также вызывать сниппет? Включи showLog=`1` в чанке, увидишь сколько будет лишних запросов.
Ну и у меня на тестовом сайте все работает, как ты указал, что с кэшем, что без.
Первый вызов:
[[pdoResources?
&parents=`0`
&limit=`0`
&depth=`1`
&tpl=`test`
]]
Чанк test
[[+pagetitle]]
<ul>
[[pdoResources?
&parents=`[[+id]]`
&tpl=`test`
&limit=`0`
&depth=`0`
]]
</ul>
Результат
Видишь, что ресурсы выбраны 2 раза? Это из-за &depth=`0` при первом вызове. Лучше указать = 1 или вообще не страдать ерундой, а выбирать за 1 раз, без рекурсии в чанках.
Спасибо за развернутый ответ.
Проблема после обновления не актуальна, спасибо Василию.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.