Как вывести с каждого родителя по ресурсу?
В ресурсе 28, еще 12 родителей, а в них куча дочек, мне надо вывести с каждого родителя по 1 последнему созданному ресурсу?
Вот у меня такой код:
Вот у меня такой код:
[[!pdoResources?
&parents=`28`
&limit=`12`
&tpl=`tpl.newsList`
]]
Комментарии: 11
Возможно не самый оптимальный вариант. В коде
первую tpl указываешь промежуточную. В этой промежуточной делаешь вызов pdoResources, &parents=`[[+]]` с лимитом 1 и отсортироваными publishedon. А вней уже tpl обертки новости tpl.newsList
[[!pdoResources?
&parents=`28`
&tpl=`tpl.newsList`
]]
первую tpl указываешь промежуточную. В этой промежуточной делаешь вызов pdoResources, &parents=`[[+]]` с лимитом 1 и отсортироваными publishedon. А вней уже tpl обертки новости tpl.newsList
pdoResources в pdoResources получается? а по проще никто не знает?
Я бы создал коллекцию объектов (можно через 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
А затем пробежался по массиву и сформировал требуемую коллекцию с одним дочерним ресурсом. Итого всего один запрос к БД.
слишком сложно :)
Вот пример сниппета, который выводит по одному ресурсу для каждого родителя, с использованием библиотеки modHelpers
Тут пригодилась бы функция filter(), но ввиду небольшого спроса на эту библиотеку дорабатывать её не планирую.
$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(), но ввиду небольшого спроса на эту библиотеку дорабатывать её не планирую.
Либа классная, просто не хочется тащить зависимости ради синтаксического сахара. Вот если бы подобное появилось в коробке MODX Revo, думаю многие сказали бы спасибо.
А ещё добавить Login, FormIt, AjaxForm, pdoTools и т.д. И MODX нужно будет переименовывать, ибо концепция модульности нарушится.
Не нужно так утрировать…
Попробуй через pdoField.
И каким же это образом, краткий пример можно?
я что-то подобное спрашивал уже modx.pro/help/11985/
через pdoField у тебя будет ид главного ресурса, а потом через pdoResources делаешь дерево.
получаешь ид ресурса на 2 уровня выше и от него в каждой дочке выводишь по одной записи.
через pdoField у тебя будет ид главного ресурса, а потом через pdoResources делаешь дерево.
получаешь ид ресурса на 2 уровня выше и от него в каждой дочке выводишь по одной записи.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.