zoukankan      html  css  js  c++  java
  • CakePHP Pagination (分頁功能)

    原本 1.1 版本是沒有分頁功能,但可以藉由 Bakery 上的討論區找到寫好的 Component 和 Helper。到了1.2版之後,CakePHP很貼心地內建了這項功能。在開發網站上,分頁是一項很常用的功能,有了這項功能,更可以讓開發的速度加快。

    分頁的功能,官網上面已經有說明了,Bakery 上也有很多相關的說明,都可以參考。我寫了一個簡單的範例程式來說明CakePHP的pagination如何使用。

    Controller:post_controller.php

    class PostController extends AppController {

    public $name = 'Post';
    public $uses = null;


    function all() {
    $this->paginate = array(
    'fields' => array('Article.id', 'Article.title', 'Article.created'), /* 選擇要顯示的資料庫欄位 */
    'limit' => 3, /* 每頁幾筆資料 */
    'order' => 'Article.created desc' /* 預設的排序方式 */
    );

    $this->loadModel("Article"); /* 載入 Model */
    //$this->Article->recursive = false; /* 如果 Model 有 hasOne, hasMany 等對應關係,且不需要時,把 recursive 設成 false */

    $this->Article->recursive = 0; /* 如果 Model 有 hasOne, hasMany 等對應關係,且不需要時,把 recursive 設成 0 */

    $this->set('articles', $this->paginate($this->Article,"Article.user_id='".$this->UserID."'")); /* 使用 paginate 函式取得資料,第二個參數可設定條件 */
    }// all


    }


    View: all.ctp

    <table border='1' bordercolor='#cccccc' cellspacing='0' cellpadding='5' width='80%' align='center'>
    <?php 
    $th = array($paginator->sort("標題", "title"), $paginator->sort("建立時間", "created"), "操作"); /* 在版型的標題上,加入可以針對欄位做排序的功能 */
    echo $html->tableHeaders($th);

    $size = count($articles);
    for($i = 0; $i < $size; $i++) {
    $tr = array($articles[$i]["Article"]["title"], $articles[$i]["Article"]["created"], "<a href='/post/edit/".$articles[$i]["Article"]["id"]."'>編輯</a>"); /* 顯示資料 */
    echo $html->tableCells($tr, array("bgcolor"=>"#999999"), array("bgcolor"=>"white"));

    }// end for
    ?>
    </table>
    <center>
    <?php
    echo $paginator->first('第一頁'). ' ';
    echo $paginator->prev('<< 前一頁').' ';
    echo $paginator->numbers(array('separator'=>' - ')); 
    echo ' '.$paginator->next('下一頁 >>');
    echo ' '.$paginator->last("最後一頁");
    ?>
    <br>
    <?php
    echo $paginator->counter(array(
    'format' => '目前在第 %page% 頁 / 總共 %pages% 頁, 每頁 %current% 筆資料, 總共 %count% 筆, 目前是第 %start% 至 %end% 筆資料'
    )); 
    ?>
    </center>


    最後得到的HTML碼會是:


    <table border='1' bordercolor='#cccccc' cellspacing='0' cellpadding='5' width='80%' align='center'>
    <tr><th><a href="/post/all/page:1/sort:title/direction:asc">標題</a></th>

    <th><a href="/post/all/page:1/sort:created/direction:desc">建立時間</a></th>

    <th>操作</th>

    </tr>

    <tr bgcolor="#999999>資料顯示在這邊(略)</tr></table>
    <center>
    <span class="current">1</span> - <span><a href="/post/all/page:2">2</a></span> - <span><a href="/post/all/page:3">3</a></span> - <span><a href="/post/all/page:4">4</a></span> <a href="/post/all/page:2">下一頁 &gt;&gt;</a> <span><a href="/post/all/page:4">最後一頁</a></span><br>
    目前在第 1 頁 / 總共 4 頁, 每頁 3 筆資料, 總共 12 筆, 目前是第 1 至 3 筆資料</center>


    由上面的HTML可以發現CakePHP已經將分頁的功能,自動做好了,而且分頁的參數是以 /page:n 的方式產生。在標題的部分,也做好排序的功能,可以試著點選看看,會自動做遞增、遞減的排序。



    參考資料: 

    官網上有關 Pagination 說明:http://book.cakephp.org/view/164/pagination

    Bakery上的討論:

    http://bakery.cakephp.org/articles/view/basic-pagination-overview-3

    http://bakery.cakephp.org/articles/view/advanced-pagination-1-2

    http://bakery.cakephp.org/articles/view/pagination-recall

    原文:http://otaku.kigi.tw/2008/03/cakephp-pagination.html


  • 相关阅读:
    v-distpicker 一个好用的三级联动的插件
    截取url参数
    position: relative 和 position: absoution 的详解
    自己封装一个下拉列表
    临界区访问的两个类:临界区类,共享临界区类——多平台版本
    临界区访问的两个类:临界区类,共享临界区类
    beyond compare 4.2.9桌面右键集成的问题修复
    递归创建、删除目录的几个函数
    读取资源中的GIF文件相应像素宽高度
    在关于对话框中,自动获取当前程序的版本,以显示
  • 原文地址:https://www.cnblogs.com/derrck/p/1456583.html
Copyright © 2011-2022 走看看