<?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程式設計的老手來說,編寫這種 實在是和呼吸一樣自然,但是對於初學者來說,常常對這個問題摸不著頭緒,因此特地撰寫此文對這個問題進行詳細的講解,力求讓看完這篇文章的朋友在看完以後對於分頁顯示的原...