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

问题描述 投票:0回答:2

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

php modx modx-revolution getresource
2个回答
0
投票

看了一段时间后,我想您基本上只需要执行另一个 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,但直接获取父级而不是执行第二次去拿它们。


0
投票

尝试使用新的代码片段:

[[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`  
]]
© www.soinside.com 2019 - 2024. All rights reserved.