2014-04-05 3 views
0

Как я могу использовать GetResources, чтобы получить родительский ресурс из нескольких узлов в дереве ресурсов ~ только один раз ~ то у меня есть GetResources позвонить:Как использовать modx getResources для возврата родительского ресурса только один раз?

[[!getResources? 
    &parents=`738,746,1222, 748, 1216, 805, 806, 807, 3401` 
    &tpl=`SecondaryUpdatesHomePageTpl` 
    &limit=`3` 
    &includeTVs=`1` 
    &processTVs=`1` 
    &hideContainers=`1` 
    &includeContent=`0` 
    &depth=`1` 
    &sortby=`{"createdon":"desc"}` 
]] 

Где & родители идентификаторов являются дерева поиска, там может быть несколько новых ресурсов в каждом родителе. Мне нужно получить ресурсы, чтобы вернуть родительский ресурс из & родителей пунктов «но только один раз»

Например, если родители 738, 748. 807 & 3401 имеют 4 или 5 новых ресурсов под ними, я не хочу 738 возвращаясь 3 раза, мне нужны ~ родители ~ 738, 748 & 807 возвращено.

Любые мысли о том, как это сделать? [MODx Revolution 2.2.12]

+2

трудно понять без экрана вашего дерева ресурсов. – Vasis

ответ

0

Посмотрев на этом некоторое время я предполагаю, что вы в основном просто нужно сделать еще GetResources позвонить с & ресурсов паров набором видоизмененной выходу первого GetResources вызова. Обратите внимание, что я удалил includeTV из вложенного вызова getResources.

Измените TPL в getResources, чтобы вывести родительский элемент, за которым следует запятая, ([[+parent]],), в основном генерируя список идентификаторов, разделенных запятыми. Поток вывода ваших GetResources позвонить в другой, который имеет правильную TPL (SecondaryUpdatesHomePageTpl)

[[!getResources? 
    &resources=`[[!getResources? 
    &parents=`738,746,1222, 748, 1216, 805, 806, 807, 3401` 
    &tpl=`CSVListOfParentsTPL` 
    &limit=`3` 
    &hideContainers=`1` 
    &depth=`1` 
    &sortby=`{"createdon":"desc"}` 
    ]]` 
    &tpl=`SecondaryUpdatesHomePageTpl` 
    &includeTVs=`1` 
    &processTVs=`1` 
]] 

Верстка, как это явно не самое эффективное решение, альтернатива будет писать свой собственный фрагмент кода, который делает $ MODx -> запрашивать более или менее те же параметры, которые вы даете getResources, но выбираете родителей непосредственно, а не выполняете вторую поездку, чтобы получить их.

+0

Похоже, что все равно будет возвращать один и тот же родительский элемент несколько раз. Мне придется использовать runSnippet для getresources, а затем сам фильтровать результаты. Спасибо хоть. –

0

Попробуйте использовать новый фрагмент кода:

[[unikids? &input=`1,5,6` $depth=`5`]] 

и snipet код:

<?php 

$array_big = array(); 
$inputids = explode(",",$input); 
foreach($inputids as $inputid) { 

$array_ids = $modx->getChildIds($inputid,$depth,array('context' => 'web')); 

     /// add to master array 
     $array_big = array_merge ($array_big, $array_ids); 
    } 

    $output = implode(",",array_unique($array_big)); 

return $output; 

?> 

это snipet выходы уникальные идентификаторы для вашего GetResources Parametr:

[[!getResources? 
    &resources=`[[unikids? &input=`1,5,6` $depth=`5`]]` 
    &tpl=`SecondaryUpdatesHomePageTpl` 
    &includeTVs=`1` 
    &processTVs=`1` 
]]