2010-05-13 57 views
1

Cake用簡單的$ this-> paginate()處理模型的分頁,但是如果我想分頁數組值的話,應該使用什麼?CakePHP - 爲數組分頁

的方案是這樣的:

$this->set('sitepages', $this->paginate()); 

此代碼在我的索引()返回類似

Array 
(
    [0] => Array 
     (
      [Sitepage] => Array 
       (
        [id] => 13 
        [name] => Home 
        [urlslug] => home 
        [parent_id] => 1 
        [page_title] => Welcome to KIAMS, Pune 
        [order] => 1 
       ) 
     ) 
    [1] => Array 
     (
      [Sitepage] => Array 
       (
        [id] => 26 
        [name] => About Us 
        [urlslug] => aboutus 
        [parent_id] => 1 
        [page_title] => 
        [order] => 2 
       ) 
     ) 
    [2] => Array 
     (
      [Sitepage] => Array 
       (
        [id] => 27 
        [name] => Overview of KIAMS 
        [urlslug] => aboutus/overview 
        [parent_id] => 26 
        [page_title] => 
        [order] => 2 
       ) 
     ) 

陣列我檢索使用$這 - > Sitepage->找到相同的數據( 'all'),然後根據需要執行一些操作,並形成一個非常類似於上面的數組,但排序得到改變。我想分頁這個新的數組,並將其傳遞給視圖。我試過

$this->set('sitepages',$this->paginate($newarray)) 

但是數據沒有分頁。有人可以幫忙分頁CakePHP的$ newarray嗎?

回答

2

要在CakePHP中進行分頁,您需要將選擇條件傳遞給paginate()調用。

其他數據操作應在afterFind()中,在您的模型文件中完成。

如果您不需要在每次檢索中完成這些更改,那麼不妨考慮創建一個指向與當前表相同的表的新模型文件,併爲該表添加afterFind()方法新文件。

+0

在我看來創建一個模型將是一個矯枉過正..當然,必須有一些簡單的方法來分頁數據... – Ashok 2010-05-13 17:26:57

+0

PaginatorHelper是否以任何方式協助?看起來您可以使用它來對視圖中的數據進行分頁。它可以做你需要的。 http://book.cakephp.org/view/166/Pagination-in-Views – 2010-05-13 21:01:12

+1

@Ashok當你使用框架時,其他人應該很容易的事情不一定在這個框架中。它們給你一些很棒的功能,但是當你需要一些額外的定製時,你可能會在所有可能的框架中使用臨時解決方案,而不僅僅是CakePHP。 – Seb 2010-05-14 01:04:24

0

$this->paginate($newarray)是分頁的錯誤方法。第一個參數不能是數組。它必須是a model name。您可能想從手冊中學習pagination setup。這將字母順序排序:

var $paginate = array(
    'limit' => 25, 
    'order' => array(
     'Sitepage.name' => 'asc' 
    ) 
); 
$this->set('sitepages', $this->paginate('Sitepage')); 
+0

你不明白這個問題......問題不在於分頁,而在於他想要分頁的一些調整結果集。 – Seb 2010-05-14 01:02:57

+0

塞卜說吧.... – Ashok 2010-05-14 01:18:55

+0

您是否找到解決方案?我遇到同樣的問題,我將一系列條件傳遞給Model-> find('all'),結果如我所料。但是,我無法與條件分開。 GRRRR – Bear 2012-05-24 01:03:30

0

我創建一個組件檢查分頁程序代碼..

是不是最好的東西,但它爲我工作.....

控制器

$slicedArray = array_slice($fullArray,($page - 1) * $this->PaginatorArray->limit ,$this->PaginatorArray->limit) 
$this->params['paging'] = $this->PaginatorArray->getParamsPaging('MyModel', $page, $total,count($slicedArray)); 
$this->helpers[] = 'Paginator'; 

組件

<?php 
/* SVN FILE: $Id$ */ 
/** 
* Pagination Array Component class file. 
* @subpackage cake.cake.libs.view.helpers 
*/ 
class PaginatorArrayComponent { 

    var $limit = 40; 
    var $step = 1; 

    function startup(& $controller){ 
     $this->controller = & $controller; 
    } 

    function getParamsPaging($model, $page, $total, $current){ 
     $pageCount = ceil($total/$this->limit); 
     $prevPage = ''; 
     $nextPage = ''; 

     if($page > 1) 
      $prevPage = $page - 1; 

     if($page + 1 <= $pageCount) 
      $nextPage = $page + 1; 

     return array(
      $model => array(
       'page' => $page, 
       'current' => $current, 
       'count' => $total, 
       'prevPage' => $prevPage, 
       'nextPage' => $nextPage, 
       'pageCount' => $pageCount, 
       'defaults' => array(
        'limit' => $this->limit, 
        'step' => $this->step, 
        'order' => array(), 
        'conditions' => array(), 

       ), 
       'options' => array(
        'page' => $page, 
        'limit' => $this->limit, 
        'order' => array(), 
        'conditions' => array(), 

       ) 
      ) 
     ); 
    } 

} 
?> 
1

我使用CakePHP 1.3版本,似乎這一個工作:

在控制器:

$result = $this->Paginate('Event'); 
$results = $this->Task->humanizeEvent($result); 

$this->set('events', $results); 

,似乎顯示爲正常的分頁排列,在視圖(設置您的分頁中正常視圖)。

humanizeEvent函數只是編輯結果數組上的一個字段,使其成爲基於數組內其他字段的句子,並且它似乎正常工作。

1

我剛剛處理了這個同樣的問題...

我發現的唯一方法是使用paginate()函數來處理所有的邏輯,而不是通過一個自定義的數組。但是,因爲它似乎這並不壞:

$this->paginate = array(
    'limit' => 2, 
    'order' => array(
     'Report.name' => 'asc' 
    ), 
    'conditions' => array(
     'Account.id' => $this->foo() 
    ), 
); 
$reports = $this->paginate(); 

在這個例子中,我分頁報告 - 但有些報告將不包括在內,這取決於哪個帳戶屬於(賬戶有一定的關係報告,hasmany等)。

通過在您的動作中寫入$paginate,您可以對條件數組使用自定義回調。因此,功能foo()可以寫入您的控制器(或推到模型)並返回一個有效的帳戶ID數組。

我發現我很容易在這個函數中重寫我的自定義邏輯 - 保持我和Cake分頁器的快樂。

希望有幫助!

0

find(「count」)中存在一個錯誤,並且如果查詢導致只在組中記錄,則返回不正確的計數。這已被修復 click here