PHP製作分頁函式 下

2021-07-26 02:29:52 字數 3845 閱讀 1536

<?php 

header('content-type:text/html;charset=utf-8');

/** 分頁函式

根據使用者填入引數(文章總條數,每頁顯示條數,顯示頁碼數等條件)智慧型分頁。

返回limit部分及html**部分。

分頁函式構思:

function page($count,$page_size,$num_btn);

return

$data=array(0->$limit,1->$html);

引數說明:$count總記錄數,$page_size每頁顯示條數,$num_btn顯示頁碼數。

*一、limit部分製作的核心思想:

文章1,

文章2,

文章3,

文章4,

文章5,

文章6,

文章7,

文章8,

文章9,

文章10

如果每頁顯示3行,則limit部分為:

limit 0,3

limit 3,3

limit 6,3

limit 9,3

演算法:1/起始位置為當前頁之前的所有記錄,2/顯示記錄為$page_size

公式:($_get['page']-1)*$page_size,$page_size

可得limit部分。

*二、html**部分製作的核心思想:

1.)-->如果$num_btn(顯示頁碼數)大於等於實際分頁碼數,則取實際頁碼數。

-->否則$num_btn(顯示頁碼數)小於實際分頁碼數。

應首先考慮這種顯示策略:

如果是奇數,當前頁碼在中間,左右兩邊各一半;

如果是偶數,右邊比左邊多乙個頁碼。

演算法:當前頁減去左邊按鈕數(($num_btn-1)/2)得左邊起始位置。

公式:$_get['page'] - floor(($num_btn-1)/2);

可得當前頁的起始頁碼數的開始位置$start(左邊座標)。

理想狀態:

奇數情況下:共有100條記錄,每頁顯示5條,共顯示20頁,使用者要求頁碼數為5,

當前頁為10的情況下,左右兩邊各為($num_btn)一半:

1,2,3,4,5,6,7,,13,14,15,16,17,18,19,20

偶數情況下:共有100條記錄,每頁顯示5條,共顯示20頁,使用者要求頁碼數為6,

當前頁為10的情況下,右邊比左邊多乙個頁碼:

1,2,3,4,5,6,7,,14,15,16,17,18,19,20

意外情況:

起始座標($start)超出邏輯範圍,左邊溢位。

結束座標($start+顯示頁碼按鈕數)超出邏輯範圍,右邊溢位。

2.)製作省略號及上下頁效果

例:1...3,4,5,6,7,8,9...13

注意點:首位達到末尾處時,入棧有溢處情況。

約束條件:1/當$num_btn頁碼號不出現最小或最大時;2/$num_btn大於5時。

(注:實驗過程中發現,對陣列進行array_pop,array_push操作時,不會重置陣列key的值。

但是經過array_****、array_unshifu操作,會重置陣列key的值)

3.)重構url、$_get引數完成動態解析。

函式書寫過程中,用page.php?page=1 進行函式測試

但是在實際開發過程中,需要對以下問題進行策略調整。

--動態url如何實現?

==$_server['request_uri']

--$_get引數可能有多個引數?

==重構url部分

4.)bug修正:

limit會出現-1,$page_size的情況。

需提前判斷$count值。

*//**

* [page 分頁函式]

* @param [int] $count [總記錄行數]

* @param [int] $page_size [每頁顯示記錄的行數]

* @param [int] $num_btn [頁碼數量]

* @return [array] [返回limit部分和html**部分]

*/function page($count,$page_size,$num_btn,$page='page')

//判斷get值合法性

if(!isset($_get[$page]) || !is_numeric($_get[$page]) || $_get[$page]<1)

//實際頁碼總數,向上取整:

$page_num_all = ceil($count/$page_size);

//get取值如果大於當前總頁碼數,則取最大值。

if($_get[$page] > $page_num_all)

$limitstart = ($_get[$page]-1)*$page_size;

$limit = "limit ,";

// 重構url

$reset_url = '';//用於重構url的初始化變數

//重構$_get值

if(!empty($url_arr['query']))

unset($query_arr[$page]);

// 判斷$_get是否還有其他值的存在

if(empty($query_arr))?=";

}else?&=";

}}else?=";

}$html = array();//html**的初始化變數

//情況1,如果使用者傳$num_btn大於等於實際頁碼數。

//情況2,如果使用者傳$num_btn小於實際頁碼數。

if($num_btn >= $page_num_all)";

}else'>";}}

}else

if(($start+($num_btn-1)) > $page_num_all)

for($i = 0;$i

< $num_btn;$i++)";

}else'>";

}$start++;

}if($num_btn > 5)1'>1..");

}# 製作省略號效果-首 結束

# 製作省略號效果-尾

// 判斷陣列元素首元素是否為$page_num_all

if($last_page != $page_num_all)'>..");

}# 製作省略號效果-尾 結束

php分頁函式

可以直接引用該函式實現分頁效果。每頁顯示條數,按鈕數都可以自定義。請自行新增css樣式。使用該函式之前首先需要連線資料庫,並選擇表。分頁中的按鈕實現,最重要的是確定起始按鈕和結束按鈕的序號,之後從起始序號到結束序號依次輸出。function paging per num 2,bt num 4,tb ...

PHP分頁顯示製作詳細講解

1 前言 分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種 實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原...

PHP分頁顯示製作詳細講解

1 前言 分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。對於web程式設計的老手來說,編寫這種 實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原...