1

当我试图解释这一点时,请耐心等待。以https://dev.bipc.com/people/为例,我正在尝试动态更新“admissions”下拉列表中的项目列表,以仅显示我们员工当前使用的项目。

目前,它只是一个使用 MIGX Loop Collection 片段生成的列表:

[[migxLoopCollection?
    &packageName=`myPackage`
    &classname=`myClassname`
    &sortConfig=`[{"sortby":"name"}]`
    &tpl=`@CODE: <option value="[[+uid]]">[[+name]]</option>`
    &toPlaceholder = `listPlaceholder`
]]

但是,此方法会显示所有项目,而不仅仅是用户选择的项目,这会导致项目将所有人过滤掉并且什么也不显示。

相反,我试图仅使用已发布的员工资源创建一个列表,我可以将其输入数组、删除重复项并根据上面的&tpl代码输出格式化的行项目。

我开始使用 PDO 资源来选择我的资源的所有父 ID,将范围限制为 5 个用户进行测试,定义我的块模板和模板变量名称。

[[pdoResources?
    &parents=`xxx`
    &depth=`0`
    &limit=`5`
    &tpl=`list-courtTpl`
    &includeTVs=`LastName,Admissions`
    &sortby=`{"LastName":"ASC"}`
    &toPlaceholder=`listItems`
]]

[[+listItems:removeDupsList]]

list-courtTpl仅包含getImageList以收集每个资源中的所有项目:

[[getImageList?
    &tvname=`Admissions`
    &tpl=`list-CourtNameTpl`
    &docid=`[[+id]]`
]]

list-CourtNameTpl使用唯一的 id 并仅使用 getCourName 片段输出它们的名称。

[[+getCourtsList:getCourtName:trimWhiteSpace]]

trimWhiteSpace片段在每个 Admission 项目中输入,并在每个项目周围添加一个双管道分隔符和修剪空白(它没有这样做):

$output = $input . "||";
echo trim($output);

removeDupsList片段应该获取当前列表并将每个项目分解为一个数组,使用array_unique删除重复项,对数据进行排序并输出每个值:

$list_input = explode('||', $input);
$list = array_unique($list_input);
sort($list);

$output = '';
foreach ($list as $x => $value) :
    $output .= $modx->getChunk('list-CourtItemTpl',array(
      'courtItem' => $value
    ));
endforeach;
echo $output;

现在问题来了,我不断收到一串中间有空格的项目,如下所示:

华盛顿特区 佛罗里达 得克萨斯 华盛顿特区 宾夕法尼亚 新泽西

您可以看到华盛顿特区的重复项目尚未删除。我假设是因为第一项前面没有空间。

任何帮助将不胜感激。

谢谢

4

0 回答 0