Встала задача: получить данные одного ресурса в другом. Стало понятно что для этого нам нужно получить ID, и после этого протаскивать остальную информацию. Использовать будем пакет getResources. Первым делом создаем TV с именем chekbox2 с типом ввода флажки, типом вывода "разделитель", где разделитель это запятая и содержимым:
@EVAL return $modx->runSnippet('getResources',array('parents'=>23,'depth'=>5,'limit'=>0,'where'=>'{"template:=":4}','sortby'=>'{"id":"ASC"}','tpl'=>'@INLINE [ [#[ [+parent]].pagetitle]] > [ [+pagetitle]]==[ [+id]]','outputSeparator'=>'||'));
где parents - id ресурса из которого забираем дочерние документы, шаблон тоже понятно)
По итогу получим такую картину в админке:
Далее в шаблоне, в котором хотим вывести выбранные ресурсы вводим код:
[ [!pdoResources? &parents = `0` &resources = `[ [*chekbox2]]` &depth = `0` &limit = `0` &includeTVs = `image` &tplWrapper = `@INLINE <table>[ [+output]]</table>` &tpl = `gen-obj`]]
Где &tpl=`gen-obj` - это название чанка, выводящий данные. И может понадобиться &includeContent=`1` если хотите протащить область контента. Ну и теперь сам чанк, ответственный за вид выводимых ресурсов и TV:
<tr>
<td><a href="[ [~[ [+id]]]]"><img src="[ [+tv.image]]" style="width:auto;float:left;margin:0 10px 0 0;"></a></td>
<td><a href="[ [~[ [+id]]]]">[ [+pagetitle]]</a></td>
<td>[ [+introtext]]</td>
</tr>
Как понимаете у меня есть дополнительное TV поле image (это картинка). В общем это отличное решение без написания всяких дополнительных сниппетов (в интернете все предлагают писать сниппеты, по крайней мере я ничего подобного не нашел) и прочего. Работает четко и может быть использовано для любых нужд: популярные новости по галочке на главной странице, или крепить объекты к застройщику как в моем случае. Чанк разумеется можно править как угодно.
Павел:
31 Oct 2017г. в 13:01
Доброго времени суток, у вас написано что в шаблоне необходимо вывести этот код
@EVAL return $modx->runSnippet('getResources',array('parents'=>23,'depth'=>5,'limit'=>0,'where'=>'{"template:=":4}','sortby'=>'{"id":"ASC"}','tpl'=>'@INLINE > ==','outputSeparator'=>'||'));
Но при написание его в шаблоне он на странице отображается так же как и в админке и ни чего не выводит. Что можно сделать?
admincms:
31 Oct 2017г. в 14:08
Павел, спасибо за ваш вопрос. В действительности в статье была опечатка. Статью поправили.
Любава:
02 May 2018г. в 13:10
Здравствуйте! Подскажите почему может не срабатывать checkbox?
Код:
в переменной:
@EVAL return $modx->runSnippet('getResources',array('parents'=>1,'depth'=>10,'limit'=>0,'where'=>'{"template:=":5}','sortby'=>'{"id":"ASC"}','tpl'=>'@INLINE .pagetitle > ==','outputSeparator'=>'||'));
в шаблоне страницы:
` &depth = `0` &limit = `0` &includeTVs = `checkbox,event-name,event-date,event-time,event-cost,event-img-bg,event-img-sm` &tpl = `thumbnail-event`
В самом ресурсе выбор чекбокса отображается, а на странице выводит все дочерние ресурсы родителя. А нужно чтобы выводил только те, где стоит галочка.
admincms:
03 May 2018г. в 11:07
Добрый день!
Для TV checkbox измените параметр вывода на разделитель и укажите в качестве разделителя запятую. В шаблоне страницы для вывода ресурсов (отмеченных) укажите параметры &parents = `0` &resources = `checkbox`.
Вячеслав:
31 Oct 2019г. в 10:55
На самом деле, полезная очень статья, спасибо!
Но вот сам шаблон неверный, судя по всему.
У меня получилось вывести только таким образом:
@EVAL return $modx->runSnippet('pdoResources',array('parents'=>10,'limit'=>0,'sortby'=>'{"pagetitle":"ASC"}','tpl'=>'@INLINE .pagetitle > ==','outputSeparator'=>'||','templates' => '4,8'));