2017-03-29 7 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를 가져 원래 DataList에를 필터링 할 수 있습니다

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

'필터'를 사용한 마지막 접근법은 명확하고 가장 효율적인 접근법입니다. – bummzack