当我试图解释这一点时,请耐心等待。以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;
现在问题来了,我不断收到一串中间有空格的项目,如下所示:
华盛顿特区 佛罗里达 得克萨斯 华盛顿特区 宾夕法尼亚 新泽西
您可以看到华盛顿特区的重复项目尚未删除。我假设是因为第一项前面没有空间。
任何帮助将不胜感激。
谢谢