Я знаю, что мы можем случайным образом отсортировать DataList
со следующим:
$example = Example::get()->sort('RAND()');
Но когда я пытаюсь случайным образом отсортировать ArrayList
это не работает Я могу сортировать ArrayList
от ID DESC
, но не с 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 для получения KitsPages
которые относятся к этому MemberID
в Versioned::get_by_stage
вызов:
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
,