萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> 深入分析PHP文章內容分頁

深入分析PHP文章內容分頁

 文章內容分頁主要有兩個辦法:

辦法一、按字數控制進行分頁

按字數分頁辦法簡單易用,但效果不好。

大致思想:首先、設定每頁能容納的最大字數;然後、計算文章內容的總字數,再由總字數和單頁最大字數計算出出總頁數。這樣整個分頁的准備工作就已經做好了。

具體到每一頁的顯示內容可以通過內容截取來實現。比如:頁容納500字,文章內容有2200字,那麼當頁面傳遞page=2時應該顯示第501至1000之間的內容。

這種辦法簡單,但顯示時可能會遇到麻煩,文章內容通常伴有HTML標簽,進行內容切割時實現HTML標簽的閉合有一定難度,如果這個工作沒做好,那麼分頁後的效果顯然也是不好的。
 

辦法二、通過分頁符進行分頁

通過分頁符進行分頁比起第一種辦法要更為理想。

大致思想:在編輯文章內容時往內容裡面插入分頁符(如:<hr class="page">),在文章顯示時對文章內容進行分割,每一部分表示一個頁的內容,通過傳遞參數控制顯示第幾頁。

這種辦法比較人性化,畢竟通過人工控制出來的分頁截取的內容更符全我們的思維,而且可以一定程度上避免HTML標簽不閉合的情形。

頁顯示 
分頁顯示是將大批量的數據分批發送到客戶端的重要手段之一,通常是將數據庫中的結果集人為的分成一段一段的來顯示。

分類 
PHP分頁分為列表分頁和內容分頁,不管是列表分頁還是內容分頁,基本原理是一樣的,將數據分批發送到客戶端。

pager.class.php 
這是一個簡單的PHP分頁顯示類,目前支持兩種分頁模式。一種是最簡單的普通分頁模式[首頁] [上頁] [下頁] [尾頁]模式,另一種是經典分頁模式,即:[1][2][3][4][5][6][7][8][9][10][下一頁][尾頁]。
 

使用方法

 代碼如下  

require_once 'pager.class.php';
$pager = new pager($totalPage,$currentPage);  // $pager對象
echo $pager->showpager();       // 輸出分頁

此分頁顯示類的構造函數
/*
@total_page     總頁數
@current_num    當前頁
@sub_pages      每次顯示的頁數
@subPage_link   每個分頁的鏈接
@subPage_type   分頁模式

當@subPage_type=1的時候為普通分頁模式
如: 共4523條記錄,每頁顯示10條,當前第1/453頁 [首頁] [上頁] [下頁] [尾頁]
當@subPage_type=2的時候為經典分頁樣式
如: 當前第1/453頁 [首頁] [上頁] 1 2 3 4 5 6 7 8 9 10 [下頁] [尾頁]
*/

 代碼如下   pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2)

上述說的PHP分頁的兩種類別(列表分頁和內容分頁),相信列表分頁對大家並不陌生,對於內容分頁,常用的方法是以分頁符的形式(比如:<hr class="pager">)將內容分割成多段,求出總頁數,用當前頁碼去獲取分頁顯示列表。

 代碼如下  

<?php
/**
 * 示例:
 * <?php
 * require_once("pager.class.php");
 * $subPages=new pager($totalPage,$currentPage);
 * echo $subPages->showpager();
 * ?>
 * */
class pager{

 var $each_disNums;//每頁顯示的條目數
 var $nums;//總條目數
 var $current_page;//當前被選中的頁
 var $sub_pages;//每次顯示的頁數
 var $pageNums;//總頁數
 var $page_array = array();//用來構造分頁的數組
 var $subPage_link;//每個分頁的鏈接
 var $subPage_type;//顯示分頁的類型
 var $_lang = array(
  'index_page' => '首頁',
  'pre_page' => '上一頁',
  'next_page' => '下一頁',
  'last_page' => '尾頁',
  'current_page' => '當前頁:',
  'total_page' => '總頁數:',
  'current_show' => '當前顯示:',
  'total_record' => '總記錄數:'
 );
 /*
 __construct是SubPages的構造函數,用來在創建類的時候自動運行.
 @total_page    總頁數
 @current_num    當前被選中的頁
 @sub_pages      每次顯示的頁數
 @subPage_link   每個分頁的鏈接
 @subPage_type   顯示分頁的類型
 
 當@subPage_type=1的時候  為普通分頁模式
 example: 共4523條記錄,每頁顯示10條,當前第1/453頁 [首頁] [上頁] [下頁] [尾頁]
 當@subPage_type=2的時候為經典分頁樣式
 example: 當前第1/453頁 [首頁] [上頁] 1 2 3 4 5 6 7 8 9 10 [下頁] [尾頁]
 */
 function __construct($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
  $this->pager($total_page,$current_page,$sub_pages,$subPage_link,$subPage_type);
 }
 
 function pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
  if(!$current_page){
   $this->current_page=1;
  }else{
   $this->current_page=intval($current_page);
  }
  $this->sub_pages=intval($sub_pages);
  $this->pageNums=ceil($total_page);
  if($subPage_link){
   if(strpos($subPage_link,'?page=') === false AND strpos($subPage_link,'&page=') === false){
    $subPage_link .= (strpos($subPage_link,'?') === false ? '?' : '&') . 'page=';
   }
  }
  $this->subPage_link=$subPage_link ? $subPage_link : $_SERVER['PHP_SELF'] . '?page=';
  $this->subPage_type = $subPage_type;
 }
 
 /*
    show_SubPages函數用在構造函數裡面。而且用來判斷顯示什麼樣子的分頁
 */
 function showpager(){
  if($this->subPage_type == 1){
   return $this->pagelist1();
  }elseif ($this->subPage_type == 2){
   return $this->pagelist2();
  }
 }
 
 
 /*
    用來給建立分頁的數組初始化的函數。
 */
 function initArray(){
  for($i=0;$i<$this->sub_pages;$i++){
   $this->page_array[$i]=$i;
  }
  return $this->page_array;
 }
 
 
 /*
    construct_num_Page該函數使用來構造顯示的條目
    即

copyright © 萬盛學電腦網 all rights reserved