Вывод pdoResources в ячейке Collections в админке

Добрый день, уважаемые коллеги! Продолжаю страдать от собственного перфекционизма, прошу спасити!
Есть ресурс, тип Коллекция, выводит дочерние ресурсы. Внутри каждого дочернего ресурса, есть TV в котором выбираются другие ресурсы от некого родителя (артисты, участвующие в ивенте из раздела артистов).
Если просто выводить в ячейку содержимое этого TV, то выводится только ID ресурса, а хочется что б выводилось по этим ID например pagetitle и longtitle этих ресурсов, ну может еще какой TV от них, ну, видимо с помощью pdoResources.
Заказчику так-то это вообще не интересно, но вот мне хочется что б всё было тип-топ, как в аптеке.
Прошу помочь, заранее сердечно благодарю!
Серый
27 ноября 2019, 17:08
modx.pro
1
744
0

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

Павел Романов
27 ноября 2019, 17:31
+1
В Collections в качестве рендера ячейки можно использовать сниппет (прописывается в поле «Сниппет-рендерер»), где значение доступно в переменной $value.
Соответственно, если значение ячейки = ID ресурса, вывести его pagetitle можно так:
<?php
if(!$res = $modx->getObject('modResource', $value)) return $value;
return $res->get('pagetitle');
    Серый
    27 ноября 2019, 20:16
    0
    Не работает(( Может надо где-то еще указать что в качестве рендера снипет брать?
    А как туда еще другие поля добавлять?
    return $res->get('pagetitle', 'longtitle');
    Так?
      Серый
      27 ноября 2019, 21:00
      0
      И, кстати, там значение — может быть несколько ID! Хорошо бы какую-то оберточку, или хотя бы
      </br>, <b>, <i>
      Серый
      28 ноября 2019, 09:31
      0
      Чертовщина какая-то… Что я могу не так делать? Вот даже нашел уже другой код решающий эту же задачу:
      <?php
      $value = $modx->getOption('value', $scriptProperties, '');
      $res = $modx->getObject('modResource',$value);
      $output = $res->get('pagetitle');
      return $output;
      Всё равно ID выводит… Что я могу делать не так?
        Павел Романов
        28 ноября 2019, 10:03
        0
        Сниппет создайте.
        В поле укажите его название, а не код.
          Серый
          28 ноября 2019, 10:04
          0
          я уже…

            Серый
            28 ноября 2019, 10:05
            0
            Но у меня там несколько ID, а выводится pagetitle только первого. И хочется что б вывелось и longtitle тоже…
              Павел Романов
              28 ноября 2019, 10:13
              0
              ID как-то разделяются (запятыми, например)?
                Серый
                28 ноября 2019, 10:18
                0
                Конечно!)) Вывод TV — Разделитель — запятая. Спасибо
                  Павел Романов
                  28 ноября 2019, 10:36
                  0
                  Тогда сниппет такой:
                  <?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>
                    Серый
                    28 ноября 2019, 10:48
                    0
                    Спасибо огромное! Я даже разобрался методом тыка как сделать что б каждый ресурс был отдельной строкой, но для полного счастья не хватает возможности завернуть всё вот в такую конструкцию:
                    <p><b>'pagetitle'</b> - <i>'longtitle'</i></p>
                    Даже гуглил как это всё в php изолировать, но не смог одолеть((
                      Павел Романов
                      28 ноября 2019, 12:22
                      0
                      Э…, так я же выше написал )).
                      Делайте с шаблонизацией, в Вашем случае чанк такой:
                      <p><b>[[+pagetitle]]</b> - <i>[[+longtitle]]</i></p>
                        Серый
                        28 ноября 2019, 14:24
                        0
                        Извиняюсь, я просто не заметил, либо вы чуть позже приписали, а я резко метнулся, как письмо на почту упало)))
                        Что-то ничего не выводится, наверное где-то неточность. Я даже в обезьяну с гранатой поиграл, попытался скобки в разные места повставлять: там две открылось и не закрылось…
                        <?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(
                          Павел Романов
                          29 ноября 2019, 07:58
                          0
                          Да, скобки пропали куда-то )
                          <?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;
                          Серый
                          29 ноября 2019, 10:05
                          0
                          Красота-то какая!!!
                          А если надо какое-то TV туда? Я честно тыкался с точкой и нижним пробелом, ничего не вышло((
                          'tv.simpleText' => $res->get('tv_simpleText'),
                          Павел Романов
                          29 ноября 2019, 12:10
                          0
                          Через get можно получить только поля ресурса (те, которые в таблице modx_site_content). TV можно получить через getTVValue:
                          $res->getTVValue('tvname');

                          Шпаргалка по объектам
                          Методы MODX
                          Серый
                          29 ноября 2019, 12:18
                          0
                          Какая же у нас с вами конфетка получилась, товарищ!!!
                          Большое вам человеческое!
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      17