Вывод pdoResources в ячейке Collections в админке
Добрый день, уважаемые коллеги! Продолжаю страдать от собственного перфекционизма, прошу спасити!
Есть ресурс, тип Коллекция, выводит дочерние ресурсы. Внутри каждого дочернего ресурса, есть TV в котором выбираются другие ресурсы от некого родителя (артисты, участвующие в ивенте из раздела артистов).
Если просто выводить в ячейку содержимое этого TV, то выводится только ID ресурса, а хочется что б выводилось по этим ID например pagetitle и longtitle этих ресурсов, ну может еще какой TV от них, ну, видимо с помощью pdoResources.
Заказчику так-то это вообще не интересно, но вот мне хочется что б всё было тип-топ, как в аптеке.
Прошу помочь, заранее сердечно благодарю!
Есть ресурс, тип Коллекция, выводит дочерние ресурсы. Внутри каждого дочернего ресурса, есть TV в котором выбираются другие ресурсы от некого родителя (артисты, участвующие в ивенте из раздела артистов).
Если просто выводить в ячейку содержимое этого TV, то выводится только ID ресурса, а хочется что б выводилось по этим ID например pagetitle и longtitle этих ресурсов, ну может еще какой TV от них, ну, видимо с помощью pdoResources.
Заказчику так-то это вообще не интересно, но вот мне хочется что б всё было тип-топ, как в аптеке.
Прошу помочь, заранее сердечно благодарю!
Комментарии: 17
В Collections в качестве рендера ячейки можно использовать сниппет (прописывается в поле «Сниппет-рендерер»), где значение доступно в переменной $value.
Соответственно, если значение ячейки = ID ресурса, вывести его pagetitle можно так:
Соответственно, если значение ячейки = ID ресурса, вывести его pagetitle можно так:
<?php
if(!$res = $modx->getObject('modResource', $value)) return $value;
return $res->get('pagetitle');
Не работает(( Может надо где-то еще указать что в качестве рендера снипет брать?
А как туда еще другие поля добавлять?
А как туда еще другие поля добавлять?
return $res->get('pagetitle', 'longtitle');
Так?
И, кстати, там значение — может быть несколько ID! Хорошо бы какую-то оберточку, или хотя бы
</br>, <b>, <i>
…
Чертовщина какая-то… Что я могу не так делать? Вот даже нашел уже другой код решающий эту же задачу:
<?php
$value = $modx->getOption('value', $scriptProperties, '');
$res = $modx->getObject('modResource',$value);
$output = $res->get('pagetitle');
return $output;
Всё равно ID выводит… Что я могу делать не так?
Сниппет создайте.
В поле укажите его название, а не код.
В поле укажите его название, а не код.
я уже…

Но у меня там несколько ID, а выводится pagetitle только первого. И хочется что б вывелось и longtitle тоже…
ID как-то разделяются (запятыми, например)?
Конечно!)) Вывод TV — Разделитель — запятая. Спасибо
Тогда сниппет такой:
Можно с шаблонозацией в чанке сделать:
Создайте чанк collection_item, где используйте соответствующие плейсхолдеры:
<?php
$arr = explode(',', $value);
foreach($arr as $id){
if(!$res = $modx->getObject('modResource', $id)) continue;
$out[] = $res->get('pagetitle').' - '.$res->get('longtitle');
}
return implode(', ', $out);
Можно с шаблонозацией в чанке сделать:
<?php
$arr = explode(',', $value);
foreach($arr as $id){
if(!$res = $modx->getObject('modResource', $id)) continue;
$out .= $modx->getChunk('collection_item', array(
'pagetitle' => $res->get('pagetitle'),
'longtitle' => $res->get('longtitle')
}
return $out;
Создайте чанк collection_item, где используйте соответствующие плейсхолдеры:
<div>
<b>[[+pagetitle]]</b> <i>[[+longtitle]]</i>
</div>
Спасибо огромное! Я даже разобрался методом тыка как сделать что б каждый ресурс был отдельной строкой, но для полного счастья не хватает возможности завернуть всё вот в такую конструкцию:
<p><b>'pagetitle'</b> - <i>'longtitle'</i></p>
Даже гуглил как это всё в php изолировать, но не смог одолеть((
Э…, так я же выше написал )).
Делайте с шаблонизацией, в Вашем случае чанк такой:
Делайте с шаблонизацией, в Вашем случае чанк такой:
<p><b>[[+pagetitle]]</b> - <i>[[+longtitle]]</i></p>
Извиняюсь, я просто не заметил, либо вы чуть позже приписали, а я резко метнулся, как письмо на почту упало)))
Что-то ничего не выводится, наверное где-то неточность. Я даже в обезьяну с гранатой поиграл, попытался скобки в разные места повставлять: там две открылось и не закрылось…
Что-то ничего не выводится, наверное где-то неточность. Я даже в обезьяну с гранатой поиграл, попытался скобки в разные места повставлять: там две открылось и не закрылось…
<?php
$arr = explode(',', $value);
foreach($arr as $id){
if(!$res = $modx->getObject('modResource', $id)) continue;
$out .= $modx->getChunk('collection_item', array(
'pagetitle' => $res->get('pagetitle'),
'longtitle' => $res->get('longtitle')
}
return $out;
Вот эти вроде как не закрылись('collection_item', array(
Да, скобки пропали куда-то )
<?php
$arr = explode(',', $value);
foreach($arr as $id){
if(!$res = $modx->getObject('modResource', $id)) continue;
$out .= $modx->getChunk('collection_item', array(
'pagetitle' => $res->get('pagetitle'),
'longtitle' => $res->get('longtitle')
));
}
return $out;
Красота-то какая!!!
А если надо какое-то TV туда? Я честно тыкался с точкой и нижним пробелом, ничего не вышло((
А если надо какое-то TV туда? Я честно тыкался с точкой и нижним пробелом, ничего не вышло((
'tv.simpleText' => $res->get('tv_simpleText'),
Через get можно получить только поля ресурса (те, которые в таблице modx_site_content). TV можно получить через getTVValue:
Шпаргалка по объектам
Методы MODX
$res->getTVValue('tvname');
Шпаргалка по объектам
Методы MODX
Какая же у нас с вами конфетка получилась, товарищ!!!
Большое вам человеческое!
Большое вам человеческое!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.