您的位置:首页 > 编程语言 > PHP开发

PHP支持html的内容分页类

2012-12-03 15:47 381 查看
根据别人的内容分页类改的,首先感谢原作者的无私奉献,由于之前的不支持html,分页后会出现很多不完整的html标签,个人改进了一些,依据</p>标签分页,不适用与每页严格固定字数的分页

下面的是代码,求优化,求改进,求指点……

<?php
class Page{
private $file;//文件内容
private $current;//当前页
private $totalPage;//总的页数
private $url;//url地址
private $pageLen;//每页显示的内容长度

function __construct($file,$len=8000){ //$len表示每页显示的字符数,根据每页显示的字符数算出页数,再根据页数计算出每页显示的段落数(</p>)
$this->file = $file;
$this->current=isset($_GET['page'])?$_GET['page']:1;
$this->pageLen = $len;
$this->totalPage = $this->getTotalPage();
$this->url= $this->getUrl();
}
//获取文件内容显示总共有多少页
private function getTotalPage(){
return ceil(strlen($this->file)/$this->pageLen);
}
//获得并分离url
private function getUrl(){
$url =parse_url($_SERVER['REQUEST_URI']);
parse_str($url['query'],$queryArr);
unset($queryArr['page']);
$queryStr = http_build_query($queryArr);
return  $url['path'].'?'.$queryStr.'&page=';
}
//首页
private function first(){
if($this->current>1)return "<a href='".$this->url."1'>首页</a>";
}
//上一页
private function pre(){
if($this->current>1)return "<a href='".$this->url.($this->current-1)."'>上一页</a>";
}
//下一页
private function next(){
if($this->current<$this->totalPage)return "<a href='".$this->url.($this->current+1)."'>下一页</a>";
}
//末页
private function end(){
if($this->current<$this->totalPage) return "<a href='".$this->url.$this->totalPage."'>末页</a>";
}
//分页列表
private function pager(){
for ($i=1;$i<=$this->totalPage;$i++){
if($i==$this->current){
$pageListStr.="<span style='font-weight:bold;color:#f00'>".$i."</span> ";
}else{
$pageListStr.="<a href='".$this->url.$i."'>".$i." </a>";
}
}
return $pageListStr;
}
//分页样式(显示方式,具体效果用css实现)
public function pagerStyle($style=1){
switch ($style){
case 1:
return "共有".$this->totalPage."页  ".$this->first().' '.$this->pre().' '.$this->pager().$this->next().' '.$this->end();
break;
case 2;
return $this->pager();
break;
}
}
//获取分页内容
public function getContents(){
return $this->abc($this->current);
}

//截取文件内容
public function abc($page){
$num = substr_count($this->file,'</p>');        //统计</p>出现的次数
$a = ceil($num/$this->totalPage);       //每页要显示的段落的个数,也就是</p>的个数
$arr = explode('</p>',$this->file);         //以</p>为标识将原数据划分成数组
$str = '';      //存放新闻内容
for($i=($page-1)*$a;$i<$page*$a;$i++){
$str .= $arr[$i];           //按数量循环输出
}
return $str;
}
}
?>

下面是调用代码,主要给想我一样的菜鸟们看的,嘿嘿

$pageNum = 8000; //每页字符数
$page = new Page($con,$pageNum);
echo $page->getContents().'<br />';
echo $page->pagerStyle();


本文出自 “我是爱好者” 博客,请务必保留此出处http://zhangxh075.blog.51cto.com/2762033/1077244
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: