2012-01-11 87 views
4

好吧,我看了看,但似乎無法在任何地方找到任何東西。我有一個精美的分頁結果顯示,但他們目前按升序顯示。我想讓他們以隨機順序顯示。這是我目前的控制器代碼:CakePHP分頁與隨機順序?

public function condos() {   

$this->paginate['Unit']=array(
     'limit'=>9, 
     'contain'=>array(
       'User'=>array(
        'id', 'user_name', 'area_code', 'exchange', 'sln', 'email'), 
       'Complex'=>array('id','complex_name', 'realname', 'photo1','photo2','photo3','photo4','photo5', 'complex_website') 
        ), 
     'conditions'=>array(
       'Unit.type'=>array('condo', 'rentalco'), 
       'Unit.active'=>1) 
    ); 
$data = $this->paginate('Unit'); 
$this->set('allcondos', $data); 


} 

回答

6

對於其他人的發現 - 實際的答案是生成種子(0和1之間的浮點數),並在RAND()排序是必要的之前將其保存到會話中(在控制器的beforeFilter()中)。然後:

$this->paginate['order'] = sprintf('RAND(%f), $this->Session->read('seed'));

這將保留調用的分頁程序之間的RAND()種子,並保留請求之間的結果的總體順序。

+0

太棒了!你可以給一個鏈接或顯示一些關於如何生成種子的代碼? – huzzah 2012-08-13 13:58:57

+0

當然,只要你改變我的答案。 :) 的變醜PHP: '函數random_float($分鐘,$最大,$圓= 10){ \t \t $ randomfloat = $分鐘+ mt_rand()/ mt_getrandmax()*($最大 - $分鐘); \t \t if($ round> 0) \t \t \t $ randomfloat = round($ randomfloat,$ round); \t \t \t return $ randomfloat; \t}' – 2012-08-14 02:41:17

+0

IZ醜陋,嘿嘿。 NP,很好的答案,謝謝! – huzzah 2012-08-14 16:39:48

0

這似乎在CakePHP的2工作得很好,我:

$this->paginate = array(
    'order' => 'RAND()' 
); 

這是使用MySQL RAND()功能,蛋糕只是傳遞到數據庫。

編輯:現在我想到了,這不是一個好主意,因爲訂單不是在頁面之間維護的。我想不出一個好辦法,讓我的頭部隨機化,並保持頁面之間的連續性。也許如果你用JavaScript來洗牌頁面上的項目?

+0

你知道嗎,因爲我曾嘗試過'order'=> array('Unit.unitnum'=>'RAND()')和男孩,所以我的語法錯誤是因爲我瘋狂地打破了我的頁面。這只是我需要的東西,謝謝! – huzzah 2012-01-11 22:43:42

+0

是的,我明白你的意思了。我想我只會求助於通過表格中的某些東西對結果進行排序,這會使它們顯得雜亂無章。趕上那裏,謝謝! – huzzah 2012-01-12 01:18:24

+0

是的,你可以創建一個「訂單」字段,讓Cake定期用cron作業進行更改。 – bjudson 2012-01-12 03:12:27