根据别人的内容分页类改的,首先感谢原作者的无私奉献,由于之前的不支持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();