2017-03-29 39 views
5

Ben rastgele aşağıdaki ile DataList sıralayabilir biliyoruz:SilverStripe rasgele düzen

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

Ama rastgele bir ArrayList sıralamak çalıştığınızda çalışmıyor. ArrayList'u ID DESC numaralı telefondan ayırabilirim, ancak RAND() ile değil.

ArrayList ürününü rasgele sıralamak için bir yolu var mı?

Örnek: Bir sayfada

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

Bu gerçekten <% loop KitsRandom %>

cevap

4

Değil bir şablonda çalışmaz. Bir yan not olarak

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

: yerine rastgele ArrayList sıralamak çalışmakla,

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

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

Beklediğim gibi değil ama yinelenen kodlar yapmamak için yeterince verimli. Bunu yakında deneyeceğim. Teşekkürler! – StefGuev

+0

Bunu sabah test ettim ... Bu mükemmel çalışıyor. Teşekkürler – StefGuev

3

Sen rastgele üzerine size döngü önce DataList sıralamak: Bu ben ile gelebilir en iyi çözüm olduğunu , sen Versioned::get_by_stage çağrısında bu MemberID ilgili KitsPages getirmesi orijinal DataList filtreleyebilirsiniz:

public function AllTheKits($sort = '') { 
    $kits = Versioned::get_by_stage(
     'KitsPage', 
     'Live', 
     'MemberID = ' . Member::currentUserID(), 
     $sort 
    ); 
    $kitsArrayList = ArrayList::create($kits); 

    return $kitsArrayList;  
} 

Ayrıca, sadece yapabilirsiniz:

return KitsPage::get()->filter('MemberID', Member::currentUserID())->sort('RAND()');

bu yalnızca canlı KitPages alacak canlı siteyi görüntülerken.

+0

Bu filtre ile son yaklaşım kesinlikle en temiz ve aynı zamanda en verimli yaklaşımdır. – bummzack