ArrayList() 的 SilverStripe 随机顺序
SilverStripe random order for ArrayList()
我知道我们可以随机排序 DataList
如下:
$example = Example::get()->sort('RAND()');
但是当我尝试对 ArrayList
进行随机排序时,它不起作用。我可以按 ID DESC
对 ArrayList
进行排序,但不能使用 RAND()
.
有没有办法让 ArrayList
随机排序它的项目?
示例:
public function AllTheKits() {
$kits = Versioned::get_by_stage('KitsPage', 'Live');
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
在一个页面中:
public function getKitsRandom() {
return $this->AllTheKits()->sort('RAND()');
}
这不适用于 <% loop KitsRandom %>
的模板
不是真的。这是我能想到的最佳解决方法:
foreach($myArrayList as $item) {
$item->__Sort = mt_rand();
}
$myArrayList = $myArrayList->sort('__Sort');
您可以在循环之前对 DataList
进行随机排序,而不是尝试对 ArrayList
:
进行随机排序
public function AllTheKits($sort = '') {
$kits = Versioned::get_by_stage('KitsPage', 'Live', '', $sort);
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
public function getKitsRandom() {
return $this->AllTheKits('RAND()'));
}
附带说明一下,您可以过滤原始 DataList 以在 Versioned::get_by_stage
调用中获取与此 MemberID
相关的 KitsPages
:
public function AllTheKits($sort = '') {
$kits = Versioned::get_by_stage(
'KitsPage',
'Live',
'MemberID = ' . Member::currentUserID(),
$sort
);
$kitsArrayList = ArrayList::create($kits);
return $kitsArrayList;
}
你也可以这样做:
return KitsPage::get()->filter('MemberID', Member::currentUserID())->sort('RAND()');
当您查看实时站点时,这只会显示实时站点 KitPages
。
我知道我们可以随机排序 DataList
如下:
$example = Example::get()->sort('RAND()');
但是当我尝试对 ArrayList
进行随机排序时,它不起作用。我可以按 ID DESC
对 ArrayList
进行排序,但不能使用 RAND()
.
有没有办法让 ArrayList
随机排序它的项目?
示例:
public function AllTheKits() {
$kits = Versioned::get_by_stage('KitsPage', 'Live');
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
在一个页面中:
public function getKitsRandom() {
return $this->AllTheKits()->sort('RAND()');
}
这不适用于 <% loop KitsRandom %>
不是真的。这是我能想到的最佳解决方法:
foreach($myArrayList as $item) {
$item->__Sort = mt_rand();
}
$myArrayList = $myArrayList->sort('__Sort');
您可以在循环之前对 DataList
进行随机排序,而不是尝试对 ArrayList
:
public function AllTheKits($sort = '') {
$kits = Versioned::get_by_stage('KitsPage', 'Live', '', $sort);
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
public function getKitsRandom() {
return $this->AllTheKits('RAND()'));
}
附带说明一下,您可以过滤原始 DataList 以在 Versioned::get_by_stage
调用中获取与此 MemberID
相关的 KitsPages
:
public function AllTheKits($sort = '') {
$kits = Versioned::get_by_stage(
'KitsPage',
'Live',
'MemberID = ' . Member::currentUserID(),
$sort
);
$kitsArrayList = ArrayList::create($kits);
return $kitsArrayList;
}
你也可以这样做:
return KitsPage::get()->filter('MemberID', Member::currentUserID())->sort('RAND()');
当您查看实时站点时,这只会显示实时站点 KitPages
。