c语言编程笔录

首页 >   > 笔记大全

笔记大全

怎么在CakePHP中进行数据分页

更新时间:2023-10-09

1. 在Controller中设置分页

  
        // src/Controller/PostsController.php  
        public function index() {  
          $this->paginate=[  
            'limit'=> 10,  
            'order'=> [  
              'created'=> 'DESC'  
            ]  
          ];  
          $posts=$this->paginate($this->Posts);  
          $this->set(compact('posts'));  
        }  
      

在Controller中设置分页的第一步是配置paginate属性。limit属性代表每页显示的条目数量,order属性代表排序方式。这里我们按照创建时间倒序排列。然后通过paginate方法分页获取Posts模型中的数据,并将数据传递给视图。

2. 在View中显示分页

  
        // src/Template/Posts/index.ctp  
          
            <?php foreach ($posts as $post): ?>  
                
            <?php endforeach; ?>  
          
# Title Created
<?=$post->id ?> <?=$this->Html->link($post->title, ['action'=> 'view', $post->id]) ?> <?=$post->created->format('Y-m-d H:i:s') ?>
<?=$this->Paginator->prev('< ' . __('previous')) ?> <?=$this->Paginator->numbers() ?> <?=$this->Paginator->next(__('next') . ' >') ?>

在View中,我们通过foreach循环显示所有的posts数据,并使用HtmlHelper中的link方法为每个post生成一个链接。paginate方法会生成一个PaginatorHelper实例,我们可以通过PaginatorHelper中的prev、numbers、next方法来显示分页导航条。

3. 创建页码样式

  
        /* webroot/css/app.css */  
        .pagination li {  
          display: inline-block;  
          padding: 5px;  
          border: 1px solid #e6e6e6;  
        }  
        .pagination li.active {  
          background-color: #337ab7;  
          color: white;  
        }  
      

除了生成分页导航条,PaginatorHelper还允许我们设置分页导航条的HTML元素。通过CSS样式我们可以配置导航条的外观,这里我们将分页导航条设置为一个水平的列表。

4. 分页查询结果

  
        // src/Controller/PostsController.php  
        use Cake\ORM\TableRegistry;  
        public function index() {  
          $query=TableRegistry::getTableLocator()->get('Posts')->find();  
          $paginate=$query->paginate([  
            'limit'=> 10,  
            'order'=> [  
              'created'=> 'DESC'  
            ]  
          ]);  
          $this->set(compact('paginate'));  
        }  
      

除了在Controller中设置分页属性,我们还可以在查询结果时进行分页,通过TableRegistry获取Posts表的查询实例,然后调用paginate方法将查询结果分页,将分页查询结果传递给视图。