如何将cakepp默认分页设置为数组



我使用的是cakehp2.5.6,我想在视图文件中显示数组。我试着用这个数组设置cakepp默认分页,但没有成功。这是我的示例代码

---'my_pages' controller-----
public function view(){
    //some other code
     $resultArray = $this->MyPages->getResults();
     $resultArray = $this->Paginator->paginate('resultArray');
     $this->set(compact('resultArray','rightPanel'));
}

和我的视图文件

----- 'view.ctp' file ------
//some other code
foreach ($resultArray as $result){
   echo $result['subject'];
   echo $result['body'];
}

在我的例子中,这个$resultArray有将近一百个元素,我想在这个页面上进行分页。那么在这种情况下可以使用cakepp默认分页吗??感谢:)

您需要实现cakehp自定义分页。

CakePHP使用两种方法来管理分页查询,即paginate和paginateCount,它们用于获取页面数据和总计记录计数。使用自定义分页查询,我们将需要在我们的模型中实现以上两个函数文件,您希望在其中进行分页以使用自定义查询。您也可以在行为文件中实现。让我们看看如何实现这一点

//in MyPages model add
public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {    
    $recursive = -1;
    // Mandatory to have
    $this->useTable = false;
    $sql = '';
    $sql .= "SELECT * FROM table_name limit ";
    // Adding LIMIT Clause
    $sql .= (($page - 1) * $limit) . ', ' . $limit;
    $results = $this->query($sql);
    return $results;
}
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    $sql = '';
    $sql .= "SELECT * FROM table_name";
    $this->recursive = $recursive;
    $results = $this->query($sql);
    return count($results);
}

您的控制器文件如下所示:

---'my_pages' controller-----
public function view(){
    // Do not forgot to set this, not sure why
    $this->MyPages->recursive = 0;
    // Setting up paging parameters
    $this->paginate = array('MyPages'=>array('limit'=>5));
    // Getting paginated result based on page #
    $this->set('resultArray', $this->paginate('MyPages'));
}

注意:MyPages应该是MyPage,因为Cakephp模型名称应该是单数。

您的视图文件如下所示:

----- 'view.ctp' file ------
//some other code
foreach ($resultArray as $result){
  echo $result['subject'];
  echo $result['body'];
}

此外,您还可以阅读CakePHP中的自定义查询分页

最新更新