2017-03-29 20 views
5

私たちは、ランダムに以下とDataListを並べ替えることができることを知っている:SilverStripeランダムな順序は

$example = Example::get()->sort('RAND()'); 

をしかし、私はランダムにArrayListを並べ替えるしようとすると、それは動作しません。 ArrayListID 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 %>

答えて

4

ないとテンプレートでは動作しません。サイドノートとして

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()')); 
} 

:代わりにランダムにArrayListをソートするためにしようと、

foreach($myArrayList as $item) { 
    $item->__Sort = mt_rand(); 
} 

$myArrayList = $myArrayList->sort('__Sort'); 
+0

期待通りではありませんが、重複したコードを作成しないと効率的です。私はすぐにこれを試してみます。ありがとう! – StefGuev

+0

私は朝にこれをテストしました...それは完璧に動作します。ありがとうございます。 – StefGuev

3

あなたがランダムにそれ以上のあなたループの前に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取得しますライブサイトを表示しているとき。

+0

'filter'による最後のアプローチは間違いなく最もクリーンで効率的なアプローチです。 – bummzack

関連する問題