<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页</title>
<style type="text/css">
.page_nav { font-family: Simsun; line-height:normal;text-align: right;margin-top: 10px;overflow: hidden;zoom: 1;text-align:center}
.page_nav a,.page_nav span,.page_nav input{display:inline-block;line-height:23px;padding:0 10px;border:1px solid #ccc;background-color:#fff; text-decoration:none;color:#666;margin-right:5px;zoom: 1;}
.page_nav input{height: 23px;line-height: 23px;padding: 0;zoom: 1; font:12px/16px;font-family: Simsun;zoom: 1;_margin-bottom:-4px;}
.page_nav a:hover,.page_nav span.pg_curr{color:#fff !important;background-color:#C00;border-color:#be0d11 #be0d11 #9a0307; text-decoration:none;}
.disabled{ background: #C00 !important; color: #fff !important;}
</style>
</head>
<?php
//假如输入网址是http://localhost/mysql/page/page.php?age=12&name=zhangsan
//打印$_SERVER
//var_dump($_SERVER);
//REQUEST_URI "/mysql/page/page.php?age=12&name=zhangsan" 除了协议,主机,端口号以外的所以东西
//SERVER_PORT 80 默认的端口号
//SERVER_NAME localhost 主机名
//REQUEST_SCHEME http 协议名
//$url = "http://www.baidu.com:80/index.php?age=23";
//$arr = parse_url($url);
//var_dump($arr);
//
//array(5) {
// ["scheme"]=>
// string(4) "http"
// ["host"]=>
// string(13) "www.baidu.com"
// ["port"]=>
// int(80)
// ["path"]=>
// string(10) "/index.php"
// ["query"]=>
// string(6) "age=23"
//}
//$str = "name=zhangsan&age=22";
//parse_str($str,$arr);&连接的字符串变成关联数组
//var_dump($arr);
//array(2) {
// ["name"]=>
// string(8) "zhangsan"
// ["age"]=>
// string(2) "22"
//}
//$arr = ["name"=>"zhangsan","age"=>"22"];
//$str = http_build_query($arr); 关联数组变成&连接的字符串
//var_dump($str);
//string(20) "name=zhangsan&age=22"
class Page{
//每页显示多少条记录
protected $number;
//一共有多少条记录
protected $totalCount;
//当前页
protected $page;
//总页数
protected $totalPage;
//url
protected $url;
protected $showPage=5;//分页条中间 显示几个页的
public function __construct($number,$tatalCount){
$this->number = $number;
$this->tatalCount = $tatalCount;
//得到总页数
$this->totalPage = $this->getTotalPage();
//得到当前页数
$this->page = $this->getPage();
//得到url
$this->url = $this->getUrl();
}
//获取sql语句
function __get($name){
if($name=='url'){
return $this->url;
}
if($name=='page'){
return $this->page;
}
if($name=='first'){
return $this->first();
}
if($name == 'totalPage'){
return $this->getTotalPage();
}
return false;
}
protected function getTotalPage(){
return ceil($this->tatalCount/$this->number);
}
/**
* 返回总条数
* @return string
*/
public function show_total_row(){
return "共{$this->tatalCount}条";
}
/**
* 返回总页数
*/
public function show_total_page(){
return "共{$this->totalPage}页";
}
function getPage(){
if(empty($_GET['page'])){
$page=1;
}else if($_GET['page']>$this->getTotalPage()){
$page=$this->getTotalPage();
}else if($_GET['page']<1){
$page=1;
}else{
$page=$_GET['page'];
}
return $page;
}
protected function getUrl(){
//协议名
$scheme = $_SERVER['REQUEST_SCHEME'];
//主机名
$host = $_SERVER['SERVER_NAME'];
//端口号
$port = $_SERVER['SERVER_PORT'];
//得到路径和请求字符串
$uri = $_SERVER['REQUEST_URI'];
//我们要将page=1等这种字符拼串接到url中,所以如果原先url有page这个参数,我们首先需要先将原来的page参数清空
//假如$uri是/mysql/page/page.php?age=12&name=zhangsan&page=1
$uriArray = parse_url($uri);
//var_dump($uriArray);
/*array(2) {
["path"]=>
string(20) "/mysql/page/page.php"
["query"]=>
string(27) "age=12&name=zhangsan&page=1"
}
*/
$path = $uriArray['path'];
if(!empty($uriArray['query'])){
parse_str($uriArray['query'],$array);
//parse_str("name=Bill&age=60",$myArray);
//print_r($myArray);
//Array ( [name] => Bill [age] => 60 )
unset($array['page']);
$query = http_build_query($array);
if($query!=''){
$path = $path.'?'.$query;
}
}
return $scheme.'://'.$host.':'.$port.$path;
}
/**
* 获取分页完整链接
* @param $url
*/
public function get_link($url,$text){
return "<a href='$url'>$text</a>";
}
protected function strurl($str){
if(strpos($this->url,'?') !== false){
$url = $this->url.'&'.$str;
}else{
$url = $this->url.'?'.$str;
}
return $url;
}
public function allUrl(){
return [
'first'=>$this->first(),
'get_next_page'=>$this->get_next_page(),
'get_prev_page'=>$this->get_prev_page(),
'get_end_page'=>$this->get_end_page(),
];
}
public function first(){
if ($this->page > 1 && $this->page != 1){
return $this->get_link($this->strurl('page=1'),"首页");
}
return "<span>首页</span>";
}
public function get_next_page(){
$page = $this->page+1;
if($page>$this->totalPage){
$page = $this->totalPage;
}
if ($this->page < $this->totalPage){
return $this->get_link($this->strurl('page='.$page),'下一页');
}
return '<span>下一页</span>';
//return $this->strurl('page='.$page);
}
public function get_prev_page(){
$page = $this->page-1;
if($page<1){
$page = 1;
}
if ($this->page > 1 && $this->page !=1){
return $this->get_link($this->strurl('page='.$page),'上一页');
}
return '<span>上一页</span>';
//return $this->strurl('page='.$page);
}
public function get_end_page(){
if ($this->page < $this->totalPage){
return $this->get_link($this->strurl('page='.$this->totalPage),'尾页');
}
return '<span>尾页</span>';
//return $this->strurl('page='.$this->totalPage);
}
public function limit(){
//区间范围 例如第一页0 - 5 条 第二页 5 - 5 条 第三页10 - 5 条
$offset = ($this->page-1)*$this->number;
return $offset.'-'.$this->number;
}
/**
* 中间的数字分页
*/
public function now_bar(){
$pageoffset=($this->showPage-1)/2;
$page_banner = '';
//初始化数据
$start=1;
$end=$this->totalPage;
if($this->totalPage>$this->showPage){
//首部省略号
if($this->page > $pageoffset + 1){
$page_banner.="...";
}
//思维区
if($this->page>$pageoffset){
$start=$this->page - $pageoffset;
$end=$this->totalPage > $this->page + $pageoffset ? $this->page + $pageoffset : $this->totalPage;
}else{
$start=1;
$end=$this->totalPage > $this->showPage ? $this->showPage : $this->totalPage;
}
if($this->page + $pageoffset > $this->totalPage){
$start=$start - ($this->page + $pageoffset - $end);
}
}
//中间页数按钮
for($j = $start; $j <= $end; $j++){
if($this->page == $j){
$page_banner .="<span class='disabled'>{$j}</span>";
}else{
$page_banner .= $this->get_link($this->strurl('page='.$j),$j);
}
}
//尾部省略号
if($this->totalPage > $this->showPage && $this->totalPage > $this->page + $pageoffset){
$page_banner.="...";
}
return $page_banner;
}
public function get_ext(){
return '<span>...</span>';
}
/**
* 输出分页码
*/
public function show_page(){
$show_page = '';
$show_page.= $this->show_total_row();
$show_page.= $this->show_total_page();
$show_page.=$this->first();
$show_page.=$this->get_prev_page();
$show_page.= $this->now_bar();
$show_page.=$this->get_next_page();
$show_page.=$this->get_end_page();
return $show_page;
}
}
?>
<?php
$config = include 'config.php';
include '../model/model.php';
$m = new Model($config);
$page_size = 2;
$p = new Page(2,10);//获取当前页 随便给参数
$start = ($p->getPage()-1)*$page_size;//按照分页规律计算出数据起始条数
$arr = $m->table('article')->field('id,title')->limit("$start,$page_size")->select();
echo($m->sql);
$rows = $m->table('article')->field('*')->rows();
$page = new Page($page_size,$rows);
?>
<body>
<table border="1" cellpadding="0">
<tr>
<td style="text-align: center">id</td>
<td>新闻标题</td>
</tr>
<?php foreach($arr as $key=>$val):?>
<tr>
<td><?php echo $val['id'];?></td>
<td><?php echo $val['title'];?></td>
</tr>
<?php endforeach;?>
</table>
<div class="page_nav" style="margin: 15px;">
<?=$page->show_page();?>
</div>
</body>
</html>
php封装分页
最新推荐文章于 2024-03-05 05:56:10 发布