如何使用getResources从资源树中的几个节点获取父资源〜只有一次〜即我有一个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"}`
]]
如果& parent id是要搜索的树,则每个父项中可能有几个新资源。我需要获取资源来返回& parents items'的父资源,但只返回一次'
例如,如果父母738,748。807& 3401每个都有4或5个新资源,我不希望738返回3次,我需要~~ 738,748&的父母。 807回来了。
有关如何做到这一点的任何想法? [modx革命2.2.12]
答案 0 :(得分:0)
看了一会儿后我猜你基本上只需要做另一个getResources调用,并将& resources param设置为第一个getResources调用的修改输出。请注意,我从嵌套的getResources调用中删除了includeTV。
更改getResources中的TPL以输出父项后跟逗号([[+parent]],
),基本上生成以逗号分隔的ID列表。将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相同的参数,但直接获取父项而不是做第二次旅行来获得它们。
答案 1 :(得分: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参数的唯一ID:
[[!getResources?
&resources=`[[unikids? &input=`1,5,6` $depth=`5`]]`
&tpl=`SecondaryUpdatesHomePageTpl`
&includeTVs=`1`
&processTVs=`1`
]]