分頁解決方案

以下文件描述了 MySQLi 和 PDO 支援的分頁解決方案。

轉到 https://github.com/rajdeeppaul/Pagination 並將 pagination.php 檔案下載到專案目錄中。假設你的目錄結構如下所示:

project directory
       |
       |--pagination.php (pagination script)
       |--index.php (file where you want to use this pagination script)

假設你希望 URL 看起來像這樣:

http://example.com/index.php          // user is on page 1
http://example.com/index.php?page=1   // user is on page 1
http://example.com/index.php?page=5   // user is on page 5
// etc ...

index.php

  1. index.php 頁面中包含 pagination.php 檔案,如下所示:

    require_once('pagination.php');
    
  2. 建立 Pagination 類的例項,如下所示:

    $pg = new Pagination($databaseDriver, $hostname, $username, $password, $databaseName);
    

    建構函式方法採用以下引數,

    (1)$databaseDriver:資料庫驅動,目前支援的驅動程式是 MySQLi 和 PDO
    (2)$hostname:主機名
    (3)$username:使用者名稱
    (4)$password:密碼
    (4)$databaseName:資料庫名稱

    例子):

    $pg = new Pagination('mysqli', 'localhost', 'root', 'pass', 'pagination_db');
    $pg = new Pagination('pdo', 'localhost', 'root', 'pass', 'pagination_db');
    
  3. 使用 setPaginationParameters() 方法設定分頁引數,如下所示:

    $pg->setPaginationParameters($rowsPerPage, $numOfPaginationLinks);
    

    setPaginationParameters() 方法採用以下引數,

    (1)$rowsPerPage:每頁顯示的錶行數
    (2)$numOfPaginationLinks:每頁顯示的分頁連結數

    例子):

    $pg->setPaginationParameters(10, 5);
    
  4. 呼叫 getResult() 方法根據 URL 查詢 ?page=X 顯示錶行,如下所示:

    $resultSet = $pg->getResult($queryString, $bindParameterArray, $globalGetArray, $keyFromURLQuery);
    

    getResult() 方法採用以下引數,

    (1)$queryStringSELECT 查詢字串
    (2)$bindParameterArray:包含繫結變數或值的
    陣列(3)$globalGetArray:超全域性陣列 $_GET
    (4)$keyFromURLQuery:來自 URL 查詢的鍵即 page

    例子):

    $resultSet = $pg->getResult('SELECT * FROM pagination', NULL, $_GET, 'page');
    $resultSet = $pg->getResult('SELECT * FROM pagination WHERE column1 = ? AND column2 = ?', array($value1, $value2), $_GET, 'page');
    

    注意: 不要在查詢中指定任何 LIMITOFFSET 子句,指令碼會處理這些。

    現在遍歷結果集即 $resultSet 陣列來訪問/顯示行詳細資訊,如下所示:

    foreach($resultSet as $row){
        /* access/display row details */
        /* $row['column1'], $row['column2'] etc. */
    }
    

    注意: 如果要檢視完整的陣列結構,請執行 var_dump($resultSet);

  5. 使用 getPaginationLinks() 方法顯示分頁連結,如下所示:

    $pgLinks = $pg->getPaginationLinks();
    

    getPaginationLinks() 方法不接受任何引數,並返回以下格式的分頁連結陣列,

    array (size=3)
      'prev' => @boolean
      'links' => @array
      'next' => @boolean
    

    現在迴圈通過 $pgLinks 陣列來顯示 paginagtion 連結,如下所示:

    if(is_array($pgLinks) && count($pgLinks) && $pgLinks['prev']){
        /* previous pages are available */
        echo '« ';
    }
    if(is_array($pgLinks) && count($pgLinks) && count($pgLinks['links'])){
        /* show pagination links */
        foreach($pgLinks['links'] as $link){
            echo '<a href="example.php?page='.$link.'">'.$link.'</a> ';
        }
    }
    if(is_array($pgLinks) && count($pgLinks) && $pgLinks['next']){
        /* next pages are available */
        echo '&raquo;';
    }
    

    注意: 如果要檢視完整的陣列結構,請執行 var_dump($pgLinks);

腳註: 你可以根據自己的選擇設定結果行和分頁連結的樣式。