php url传统模式,一个PHP分页类-支持URL普通模式和PATHINFO模式

分页实现是网站应用最常用的功能,需要注意的是,要和网站的url模式相一致,且不丢失其他GET参数。再次就是要可以配置你的分页主题。这里我整理了一个分页类,调用非常简单,demo如下:

场景:写了一个微信精选的文摘,有分页功能,URL模式就是普通模式"?a=bc&page=2",若你的程序是PATHINTO模式的,实例化Page类时配置一下$urlmode=1就可以生成形如"./a/bc/page/2"的URL。分页类首要知道你的总数和每页的个数就可以了。话不多说,直接看代码加注释

应用代码摘取:

require './DMysqli.php';//数据库类

$dbconfig = array('hostname'=>SAE_MYSQL_HOST_M,'username'=>SAE_MYSQL_USER,'password'=>SAE_MYSQL_PASS,'database'=>SAE_MYSQL_DB,'hostport'=>SAE_MYSQL_PORT,'tablePrefix'=>'wx_');

$dmysqli = new DMysqli($dbconfig);

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

require 'Util/page.class.php';//引入Page分页类

$sql = 'select count(*) from wx_article';

$count = $dmysqli->query($sql);//总数

$totalRow = intval(current($count[0]));

$Page = new Page($totalRow,10);//实例化分页类:配置总数、每页个数

$sql = 'select * from wx_article ORDER BY posttime,id desc LIMIT $Page->firstRow'.','.'$Page->listRows';//取出当前页的数据,关键在sql语句的limit语法

$res = $dmysqli->query($sql);

/*

//分页语种自定义

$Page->setConfig('header','items');

$Page->setConfig('prev','Prev Page');

$Page->setConfig('next','Next Page');

$Page->setConfig('first','First Page');

$Page->setConfig('last','Last Page');

$Page->setConfig('theme',' %totalRow% %header% %nowPage%/%totalPage% Page %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');

*/

$show = $Page->show();//分页类可以生成分页字符串,然后赋值给变量,在模版里输出就好了!

include('template/index.html');

Page类源码如下:

class Page {

// 分页栏每页显示的页数

public $rollPage = 4;

// 页数跳转时要带的参数

public $parameter;

// 当url模式为PATHINFO时,此配置项有效

public $depr = '/';

// 分页URL地址

public $url = '';

// 默认列表每页显示行数

public $listRows = 20;

// 起始行数

public $firstRow;

// 分页总页面数

protected $totalPages;

// 总行数

protected $totalRows;

// 当前页数

protected $nowPage;

// 分页的栏的总页数

protected $coolPages;

// 分页显示定制

protected $config = array (

'header' => '条',

'prev' => '上一页',

'next' => '下一页',

'first' => '第一页',

'last' => '最后一页',

'theme' => ' %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%'

);

// 默认分页变量名

protected $varPage;

// url模式:0 普通模式 1 PATHINFO模式

protected $urlmode;

/**

* 架构函数

*

* @access public

* @param array $totalRows

* 总的记录数

* @param array $listRows

* 每页显示记录数

* @param array $parameter

* 分页跳转的参数

*

*/

public function __construct($totalRows, $listRows = '', $parameter = '', $url = '', $urlmode = 0) {

$this->totalRows = $totalRows;

$this->parameter = $parameter;

$this->varPage = 'page';

if (! empty ( $listRows )) {

$this->listRows = intval ( $listRows );

}

$this->totalPages = ceil ( $this->totalRows / $this->listRows ); // 总页数

$this->coolPages = ceil ( $this->totalPages / $this->rollPage );

$this->nowPage = ! empty ( $_GET [$this->varPage] ) ? intval ( $_GET [$this->varPage] ) : 1;

if (! empty ( $this->totalPages ) && $this->nowPage > $this->totalPages) {

$this->nowPage = $this->totalPages;

}

$this->firstRow = $this->listRows * ($this->nowPage - 1);

$this->urlmode = $urlmode;

}

public function setConfig($name, $value) {

if (isset ( $this->config [$name] )) {

$this->config [$name] = $value;

}

}

/**

* 分页显示输出

*

* @access public

*

*/

public function show() {

if (0 == $this->totalRows)

return '';

$p = $this->varPage;

$nowCoolPage = ceil ( $this->nowPage / $this->rollPage );

// 分析分页参数

if ($this->parameter && is_string ( $this->parameter )) {

parse_str ( $this->parameter, $parameter );

} elseif (empty ( $this->parameter )) {

// unset($_GET[C('VAR_URL_PARAMS')]);

if (empty ( $_GET )) {

$parameter = array ();

} else {

$parameter = $_GET;

}

}

$parameter [$p] = '__PAGE__';

if ($this->urlmode == 0) { // 普通模式URL转换

$url = "?" . http_build_query ( $parameter );

} else { // PATHINFO模式或者兼容URL模式

$url = ".$this->depr";

if (! empty ( $parameter )) { // 添加参数

foreach ( $parameter as $var => $val ) {

if ('' !== trim ( $val ))

$url .= $var . $this->depr . urlencode ( $val );

}

}

}

// 上下翻页字符串

$upRow = $this->nowPage - 1;

$downRow = $this->nowPage + 1;

if ($upRow > 0) {

$upPage = "" . $this->config ['prev'] . "";

} else {

$upPage = '';

}

if ($downRow <= $this->totalPages) {

$downPage = "" . $this->config ['next'] . "";

} else {

$downPage = '';

}

unset ( $upPage );

unset ( $downPage );

// << < > >>

if ($nowCoolPage == 1) {

$theFirst = '';

$prePage = '';

} else {

$preRow = $this->nowPage - $this->rollPage;

$prePage = "上" . $this->rollPage . "页";

$theFirst = "" . $this->config ['first'] . "";

}

if ($nowCoolPage == $this->coolPages) {

$nextPage = '';

$theEnd = '';

} else {

$nextRow = $this->nowPage + $this->rollPage;

$theEndRow = $this->totalPages;

$nextPage = "下" . $this->rollPage . "页";

$theEnd = "" . $this->config ['last'] . "";

}

// 1 2 3 4 5

$linkPage = "";

for($i = 1; $i <= $this->rollPage; $i ++) {

$page = ($nowCoolPage - 1) * $this->rollPage + $i;

if ($page != $this->nowPage) {

if ($page <= $this->totalPages) {

$linkPage .= "  " . $page . " ";

} else {

break;

}

} else {

if ($this->totalPages != 1) {

$linkPage .= " " . $page . "";

}

}

}

$pageStr = str_replace ( array (

'%header%',

'%nowPage%',

'%totalRow%',

'%totalPage%',

'%upPage%',

'%downPage%',

'%first%',

'%prePage%',

'%linkPage%',

'%nextPage%',

'%end%'

), array (

$this->config ['header'],

$this->nowPage,

$this->totalRows,

$this->totalPages,

$upPage,

$downPage,

$theFirst,

$prePage,

$linkPage,

$nextPage,

$theEnd

), $this->config ['theme'] );

return $pageStr;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值