如何使用modx getResources仅返回父资源一次?

时间:2014-04-05 19:36:08

标签: modx modx-revolution getresource

如何使用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]

2 个答案:

答案 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`  
]]