在SilverStripe 3.1中,我可以通过执行以下操作获得Children
的排序列表:
$this->Children()->sort('Title', 'ASC');
但是当我这样做时,大写字母(作为一个组)出现在小写字母之前(作为一个组);因此" D"来自" a":
Aadb
Bdbdd
CDBD
Dbddb
AEB
但是我想要这样的排序顺序:
Aadb
AEB
Bdbdd
CDBD
Dbddb
如何在SilverStripe中执行此操作?
修改
我发现了一个类似question的地方,威尔说:
奇怪!我原本以为它会不区分大小写。您只需将数组列表导出为数组($ list-> map()),然后编写自己的排序逻辑。
有谁知道怎么做?
我尝试过以下操作,但不会返回任何结果:
function SortedChildren(){
$sortChildren = $this->Children()->map();
natcasesort($sortChildren);
return $sortChildren;
}
答案 0 :(得分:0)
好的,最后我想出了如何编写和使用我自己的排序逻辑:
function SortChildren() {
$_list = $this->Children()->map("URLSegment", "Title");
natcasesort($_list);
$sortedChildren = new ArrayList();
foreach($_list as $key => $value ){
$fields = new ArrayData(array('ChildURL' => $key, 'Title' => $value));
$sortedChildren->push($fields);
}
return $sortedChildren;
}
然后在模板中使用:
<% loop SortChildren %>
<div class="child"><a href="$ChildURL">$Title</a></div>
<% end_loop %>