我们可以对输出的分页样式进行定制,分页类 Page 提供了一个 setConfig 方法来修改默认的一些设置。例如:
$page->setConfig('header', ' 个会员 ' )
setConfig 方法支持的属性包括:
header :头部描述信息,默认值 “条记录”
prev :上一页描述信息,默认值是“上一页”
next :下一页描述信息,默认值是“下一页”
first :第一页描述信息,默认值是“第一页”
last :最后一页描述信息,默认值是“最后一页”
theme :分页主题描述信息,包括了上面所有元素的组合 ,设置该属性可以改变分页的各个单元的显示位置,默认值是
“ %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end% ”
通过 setConfig 设置以上属性可以完美的定制出你的分页显示风格。
方法/步骤首先要了解下分页的原理即
SELECT * FROM table …… limit 开始位置 , 操作条数
开始位置从0开始
SELECT * FROM table …… limit 0 , 20
取最前面20条
SELECT * FROM table …… limit 10 , 20
11条到20条
其次分页要用的公式
得到公式
(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize
还要了解parse_url()解析URL函数
parse_url() 是讲URL解析成有固定键值的数组的函数
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor")
print_r($ua)
结果:
Array
(
[scheme] =>http
[host] =>hostname
[user] =>username
[pass] =>password
[path] =>/path
[query] =>arg=value
[fragment] =>anchor
)
创建数据库bbs和表test有
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) character set gb2312 NOT NULL,
`sex` varchar(2) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11
然后插入十几条测试数据即可
写mysql数据库连接代码保存conn.php文件里
代码如下
<?php
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误")
mysql_select_db("bbs", $conn)
mysql_query("set names 'GBK'")//使用GBK中文编码
function htmtocode($content) {
$content = str_replace("\n", "<br>", str_replace(" ", " ", $content))
return $content
}
//$content=str_replace("'","'",$content)
//htmlspecialchars()
?>
写分页函数page.php
代码如下
<?php
function _PAGEFT($totle, $displaypg = 20, $url = '') {
global $page, $firstcount, $pagenav, $_SERVER
$GLOBALS["displaypg"] = $displaypg
if (!$page)
$page = 1
if (!$url) {
$url = $_SERVER["REQUEST_URI"]
}
//URL分析:
$parse_url = parse_url($url)
$url_query = $parse_url["query"]//单独取出URL的查询字串
if ($url_query) {
$url_query = ereg_replace("(^|&)page=$page", "", $url_query)
$url = str_replace($parse_url["query"], $url_query, $url)
if ($url_query)
$url .= "&page"
else
$url .= "page"
} else {
$url .= "?page"
}
$lastpg = ceil($totle / $displaypg)//最后页,也是总页数
$page = min($lastpg, $page)
$prepg = $page -1//上一页
$nextpg = ($page == $lastpg ? 0 : $page +1)//下一页
$firstcount = ($page -1) * $displaypg
//开始分页导航条代码:
$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B>条记录,共 $totle 条记录"
//如果只有一页则跳出函数:
if ($lastpg <= 1)
return false
$pagenav .= " <a href='$url=1'>首页</a>"
if ($prepg)
$pagenav .= " <a href='$url=$prepg'>前页</a>"
else
$pagenav .= " 前页 "
if ($nextpg)
$pagenav .= " <a href='$url=$nextpg'>后页</a>"
else
$pagenav .= " 后页 "
$pagenav .= " <a href='$url=$lastpg'>尾页</a>"
//下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n"
for ($i = 1$i <= $lastpg$i++) {
if ($i == $page)
$pagenav .= "<option value='$i' selected>$i</option>\n"
else
$pagenav .= "<option value='$i'>$i</option>\n"
}
$pagenav .= "</select>页,共 $lastpg 页"
}
include("conn.php")
$result=mysql_query("SELECT * FROM `test`")
$total=mysql_num_rows($result)
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉).
_PAGEFT($total,5)
echo $pagenav
$result=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ")
while($row=mysql_fetch_array($result)){
echo "<hr><b>".$row[name]." | ".$row[sex]
}
?>
调用数据和分页list.php
<?php
/**
* 爱微网 www.iiwnet.com/php/
*/
include("conn.php")
$pagesize=5
$url=$_SERVER["REQUEST_URI"]
$url=parse_url($url)
$url=$url[path]
$numq=mysql_query("SELECT * FROM `test`")
$num = mysql_num_rows($numq)
if($_GET[page]){
$pageval=$_GET[page]
$page=($pageval-1)*$pagesize
$page.=','
}
if($num >$pagesize){
if($pageval<=1)$pageval=1
echo "共 $num 条".
" <a href=$url?page=".($pageval-1).">上一页</a><a href=$url?page=".($pageval+1).">下一页</a>"
}
echo $SQL="SELECT * FROM `test` limit $page $pagesize "
$query=mysql_query($SQL)
while($row=mysql_fetch_array($query)){
echo "<hr><b>".$row[name]." | ".$row[sex]
}
?>
注意事项
注意分页公式写法你只要记住即可;
(当前页数 - 1 )X 每页条数 , 每页条数;
Select * from table limit ($Page- 1) * $PageSize, $PageSize;
注意三个代码文件在同一个目录下;
主要是最后的list.php调用代码要细看很有用。