Как вывести с каждого родителя по ресурсу?

В ресурсе 28, еще 12 родителей, а в них куча дочек, мне надо вывести с каждого родителя по 1 последнему созданному ресурсу?

Вот у меня такой код:
[[!pdoResources?
    &parents=`28`
    &limit=`12`
    &tpl=`tpl.newsList`
]]
Александр Янк
05 июня 2017, 12:45
modx.pro
1
1 956
0

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

Владимир Бабусенко
05 июня 2017, 16:25
0
Возможно не самый оптимальный вариант. В коде
[[!pdoResources?
    &parents=`28`
    &tpl=`tpl.newsList`
]]

первую tpl указываешь промежуточную. В этой промежуточной делаешь вызов pdoResources, &parents=`[[+]]` с лимитом 1 и отсортироваными publishedon. А вней уже tpl обертки новости tpl.newsList
    Александр Янк
    05 июня 2017, 17:31
    0
    pdoResources в pdoResources получается? а по проще никто не знает?
      Сергей Шлоков
      05 июня 2017, 22:03
      1
      +2
      Я бы создал коллекцию объектов (можно через pdoResources) таким запросом
      select Res.* from `modx_site_content` as Parent
      inner join `modx_site_content` as Res on Res.parent = Parent.id
      where Parent.parent = 12
      ORDER BY Res.parent ASC, Res.id DESC
      А затем пробежался по массиву и сформировал требуемую коллекцию с одним дочерним ресурсом.
      Итого всего один запрос к БД.
        Александр Янк
        05 июня 2017, 22:57
        0
        слишком сложно :)
          Сергей Шлоков
          06 июня 2017, 10:06
          +2
          Вот пример сниппета, который выводит по одному ресурсу для каждого родителя, с использованием библиотеки modHelpers
          $parent = 0;
          $res = resources()->innerJoin('modResource','Parent')->where(['Parent.parent' => 12])->sortby('parent', 'ASC')->sortby('id', 'DESC')->each(function($resource, $idx) use (&$parent) {
              if ($resource['parent'] == $parent) return '';
              $parent = $resource['parent'];
              return "<li>{$idx}. ".$resource['pagetitle']."</li>"; // можно использовать чанк
          });
          return '<ul>' . $res . '</ul>';
          Всего 7 строчек.

          Тут пригодилась бы функция filter(), но ввиду небольшого спроса на эту библиотеку дорабатывать её не планирую.
            Павел Гвоздь
            06 июня 2017, 12:59
            0
            Либа классная, просто не хочется тащить зависимости ради синтаксического сахара. Вот если бы подобное появилось в коробке MODX Revo, думаю многие сказали бы спасибо.
              Сергей Шлоков
              06 июня 2017, 14:32
              -1
              А ещё добавить Login, FormIt, AjaxForm, pdoTools и т.д. И MODX нужно будет переименовывать, ибо концепция модульности нарушится.
UDAV
05 июня 2017, 18:42
+1
Попробуй через pdoField.

    Александр Янк
    05 июня 2017, 22:57
    0
    И каким же это образом, краткий пример можно?
      UDAV
      06 июня 2017, 08:43
      0
      я что-то подобное спрашивал уже modx.pro/help/11985/
      через pdoField у тебя будет ид главного ресурса, а потом через pdoResources делаешь дерево.

      получаешь ид ресурса на 2 уровня выше и от него в каждой дочке выводишь по одной записи.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    11