如何使用 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"}`
]]
其中 &parents id 是要搜索的树,每个父树中可能有几个新资源。我需要获取资源来返回 &parents 项目的父资源“但仅一次”
例如,如果父母738、748、807和3401各自下有4或5个新资源,我不希望738返回3次,我需要返回~738、748和807的父母。
关于如何做到这一点有什么想法吗? [modx 革命 2.2.12]
看了一段时间后,我想您基本上只需要执行另一个 getResources 调用,并将 &resources 参数设置为第一个 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`
]]
像这样的嵌套显然不是最有效的解决方案,另一种方法是编写自己的自定义代码片段,该代码片段或多或少与您提供 getResources 的参数相同,生成 $modx->query,但直接获取父级而不是执行第二次去拿它们。
尝试使用新的代码片段:
[[unikids? &input=`1,5,6` $depth=`5`]]
和狙击代码:
<?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;
?>
此片段将唯一的 ID 输出到您的 getResources 参数:
[[!getResources?
&resources=`[[unikids? &input=`1,5,6` $depth=`5`]]`
&tpl=`SecondaryUpdatesHomePageTpl`
&includeTVs=`1`
&processTVs=`1`
]]