例子一
網頁的分頁選擇效果直接影響使用者的使用體驗。類似功能的方法有很多,我在這裡寫的方法主要是的優勢在於前後端分離,可以自己定義長度和分頁的行數。
測試圖例:
效果圖:
例子
/**
*
* @param $page 頁碼(1至正無窮)
* @param $num 資料中多上行為一頁
* @param $rows 資料的總行數
* @param $length 下標的最大長度
* @return array
*/
public function PageDate($page, $num , $rows , $length){
//初始化資料
$MaxPage = 0; //最大頁碼
$MinPage = 0; //最小頁碼
$ServerPage = 0; //下拉框中顯示的頁碼
$PageData = array(); //全部的頁碼集合(使用者下拉框選擇)
$PageShowData = array(); //用於顯示下標的頁碼集合
$page = intval($page);
if($rows == 0){
return $data = array(
'page' => $page,
'MaxPage' => $MaxPage,
'MinPage' => $MinPage,
'ServerPage' => $ServerPage,
'PageData' => $PageData,
'PageShowData' => $PageShowData
);
}
//得到最大分頁和最小分頁
$MaxPage = intval($rows / $num);
$double = $rows % $num;
if($double > 0.000000001)
{
$MaxPage += 1;
}
$MinPage = 1;
$ServerPage = 1;
//得到頁碼的全部項目
for($i = 1; $i <= $MaxPage; $i++ ){
$PageData[$i] = $i;
}
//對頁碼進行正確性改正
if($page < $MinPage){
$page = 1;
}
if($page > $MaxPage){
$page = 1;
}
/*產生顯示的頁碼標籤*/
//產生左側的代碼快
if($page == $MinPage){
$PageShowData[1] = $page;
}
if($page > $MinPage){
$PageShowData[1] = $MinPage;
// $PageShowData[2] = $page - 1; // <<
$PageShowData[2] = '<<'; // <<
if($page -2 > $MinPage ){
$PageShowData[3] = $page - 2;
$PageShowData[4] = $page - 1;
}elseif($page -2 == $MinPage){
$PageShowData[3] = $page - 1;
}
//確定選中的頁碼代碼快
$PageShowData[count($PageShowData) + 1] = $page;
}
$COUNT = count($PageShowData) + 1;
//產生右側的代碼塊
if($page == $MaxPage){
return $data = array(
'page' => $page,
'MaxPage' => $MaxPage,
'MinPage' => $MinPage,
'ServerPage' => $ServerPage,
'PageData' => $PageData,
'PageShowData' => $PageShowData
);
}
if($page < $MaxPage) {
if($MaxPage - $page >= 2){
$j = 1;
for($i = $COUNT; $i <= $length ; $i++){
$PageShowData[$i] = $page + $j;
$j ++;
if($PageShowData[$i] == $MaxPage -1){
break;
}
}
}
$COUNT = count($PageShowData) + 1;
// $PageShowData[$COUNT] = $page + 1; //>>
$PageShowData[$COUNT] = '>>';
$PageShowData[$COUNT + 1] = $MaxPage;
//得到選中的參數
$ServerPage = $PageShowData[$COUNT-1] + 1;
if($ServerPage > $MaxPage){
$ServerPage = 1;
}
return $data = array(
'page' => $page,
'MaxPage' => $MaxPage,
'MinPage' => $MinPage,
'ServerPage' => $ServerPage,
'PageData' => $PageData,
'PageShowData' => $PageShowData
);
}
}
例子二
這樣在某些情況下會嚴重影響頁面的布局,而且文章頁面過多全部顯示出來的話 ,也會影響使用者體驗,因此這篇教程圍繞dede分頁數量無法控制的問題,以修改{dede:pagebreak/}標籤為主進行講解。
情況如下:
這是分了15頁,假如更多呢,不感想象,自己辛苦花錢做出來的模板就完全走樣了!
改後效果:
1
2
3
修改方法:
在include/arc.archives.class.php這個類,這個主是來解析文章內容的類
找到
function GetPagebreak($totalPage,$nowPage,$aid)
這是一個靜態分頁解析的一個方法,在這個方法裡找到:for($i=1;$i<=$totalPage$i++)
在這個迴圈前面加上 :
if($totalPage>=8){//這個是在分頁數量大於的情況下執行下面的語句
$totallist=7+$nowPage;//這裡是要顯示幾頁,如果是10頁就寫9
if($totallist>$totalPage){
$totallist=$totalPage;
}
$d=$nowPage;
$dqys=$totallist-($d-1);
if($dqys<8){
$d=$totalPage-7;
}
}else{
$totallist=$totalPage;
$d=1;
}
然後再改
for($i=1;$i<=$totalPage;$i++)為for($i=$d;$i<=$totallist;$i++)
這個是靜態頁面分頁的修改,動態和這個方法一樣