搜索
首页后端开发php教程php长文章分页原理与实现程序_PHP教程
php长文章分页原理与实现程序_PHP教程Jul 13, 2016 pm 04:56 PM
php下面代码分析分页原理实现文章朋友程序

下面我来分析了长文章分页与文章分页程序代码,有需要的朋友可参考参考。

办法一、按字数控制进行分页

按字数分页办法简单易用,但效果不好。

大致思想:首先、设定每页能容纳的最大字数;然后、计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数。这样整个分页的准备工作就已经做好了。

具体到每一页的显示内容可以通过内容截取来实现。比如:页容纳500字,文章内容有2200字,那么当页面传递page=2时应该显示第501至1000之间的内容。

这种办法简单,但显示时可能会遇到麻烦,文章内容通常伴有HTML标签,进行内容切割时实现HTML标签的闭合有一定难度,如果这个工作没做好,那么分页后的效果显然也是不好的。

 代码如下 复制代码

 


$content1="内容要很长。。。。。。";

$current=$_REQUEST['page_t'];
 $result=ff_page($content1,$current);
 echo $result;

 function ff_page($content,$page)   
    {   
    global $expert_id; 
   
    if (empty($page)) {
         $page = 1 ;
    }  //给$page赋初始值
   
    $PageLength = 2000; //每页字数   
    $CLength = strlen($content);  //文章长度 
    $PageCount = floor(($CLength / $PageLength)) + 1; //计算页数   
    $PageArray=array();//断页位置数组     
    $Seperator = array("n","r","。","!","?",";",",","”","’",".","!","?",";"); //分隔符号   
   
    //echo "页数:".$PageCount."
";   
    //echo "长度:".$CLength."
";   
    //strpos() 函数返回字符串在另一个字符串中第一次出现的位置   
   
    if($CLength      {   
        echo $content;   
     }//如果只有一页,直接打印
       else{   
        $PageArray[0]=0;   
        $Pos = 0;   
        $i=0;   
     //第一页,print_r($Seperator);  
    for( $j=0 ; $j        {   
      $Pos=strpos($content,$Seperator[$j],$PageArray[$i]+1900); 
      while($Pos > 0 && $Pos $i*$PageLength )   
      {   
     $PageArray[$i] = $Pos ;
     if ($Pos+$PageLength > $CLength)
     {
         $start_p = $CLength-1 ;  
     }
     else{
         $start_p = $Pos+$PageLength ;
     }
     //给一个找寻位置的起始点,防止超过位置总字符数   
     $Pos = strpos($content,$Seperator[$j],$start_p) ;    
      }
        //如果已经找到分页点,跳出循环
        if($PageArray[$i]>0)   
        {   
         $j = $j + sizeof($Seperator) + 1;
        }   
 }    
 
    for( $i = 1; $i     {   
       for( $j = 0 ; $j        {        
         $Pos=strpos($content,$Seperator[$j],$PageArray[$i-1]+1900);  
     while($Pos > 0 && $Pos $i*$PageLength )   
   {   
      $PageArray[$i] = $Pos ;        
      if ($Pos+$PageLength > $CLength)
      {
         $start_p2 = $CLength-1 ;  
      }
      else{
         $start_p2 = $Pos+$PageLength ;
      }
      $Pos = strpos($content,$Seperator[$j],$start_p2) ;   
    }   
   if($PageArray[$i]>0)   
   {   
    $j = $j + sizeof($Seperator) + 1;   
   }   
    }   
   }   
    //--PHP长文章分页函数最后一页    
    $PageArray[$PageCount-1] = $CLength;
    //$page=2;   
 
    if($page==1)   
 {   
     $output=substr($content,0,$PageArray[$page-1]+2);   
 }   
    if($page > 1 && $page  {   
  $output=substr($content,$PageArray[$page-2]+2,$PageArray[$page-1]-$PageArray[$page-2]);   
  $output=" (上接第".($page-1)."页)n".$output;   
 }   
   
//  echo str_replace("n","
   ",$output); //回车换行,根据需要调整   
    echo $output ; 
       
 if($PageCount > 1)   
 {   
    echo "

";   
    echo "".$page."/".$PageCount."页  ";   
    if($page>1)   
     echo "上一页 ";   
    else   
      echo "上一页 ";   
        
    for( $i=1 ; $i     {   
     echo "[".$i."] ";   
    }   
      
    if($page         echo " 下一页 ";   
  else   
   echo " 下一页 ";   
  echo "
";   
    }   
 }   
}

?> 


办法二、通过分页符进行分页

通过分页符进行分页比起第一种办法要更为理想。

大致思想:在编辑文章内容时往内容里面插入分页符(如:


),在文章显示时对文章内容进行分割,每一部分表示一个页的内容,通过传递参数控制显示第几页。

这种办法比较人性化,毕竟通过人工控制出来的分页截取的内容更符全我们的思维,而且可以一定程度上避免HTML标签不闭合的情形。

文章内容分页代码,是根据由编辑器插入的分页符来操作了,我们可以分出超漂亮的偏移效果的分页。

 代码如下 复制代码

class contentpage
{
 private $content;  //文章内容
 private $pagesize;    //每页最少字节数
 private $breakflag;  //分页符(可以自定义,默认为n)
 private $pageurl;  //url地址
 private $pagevar;  //分页参数
 public  $pagecount;  //总页数
 public  $page;   //当前页码
 public  $pagebreak;  //每页起始位置

 function __construct($content = "",$pagesize = 10,$breakflag ="n",$pageurl = '',$pagevar = 'p')
 {
  $this->content   = $content;
  $this->pagesize  = $pagesize;
  $this->breakflag = $breakflag;
  $this->pageurl   = $pageurl;
  $this->pagevar   = $pagevar;
  $this->getpages();
 }

 //总页数,每页的起始位置和结束位置
 public function getpages()
 {
  $contentlen   = strlen($this->content); //文章总字节数
  $this->pagebreak[0] = 0;
  $i = 0;
  $offset = $this->pagesize;
 
  for ($k=0;$kpagesize;$k++)
  {
   if($offset > $contentlen)
   {
    $i++;
    $this->pagebreak[$i] = $contentlen;
    break;
   }
   //查找$this->pagevar出现的位置
   $where = strpos($this->content,$this->breakflag,$offset);
   if($where > $contentlen or intval($where)    {
    $i++;
    $this->pagebreak[$i] = $contentlen;
    break;
   }
   else
   {
    $i++;
    $this->pagebreak[$i] = $where;
    $offset = $where + $this->pagesize;
   }
  }
  $this->pagecount = $i;
  if(isset($_get[$this->pagevar]) && $_get[$this->pagevar] >1 && $_get[$this->pagevar] pagecount)
  {
   $this->page = $_get[$this->pagevar];
  }
  else
  {
   $this->page = 1;
  }
 }

 //每页内容
 function getpage()
 {
  //截取当前页码的数据
  if($this->page > 1)
  {
   return substr($this->content,$this->pagebreak[$this->page-1]+1,$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]);
  }
  else
  {
   return substr($this->content,$this->pagebreak[$this->page-1],$this->pagebreak[$this->page] - $this->pagebreak[$this->page-1]);
  }

 }

 //分页条
 public function getpagenav()
 {
  if($this->page > 1)
  {
   $pagenav = "上一页  ";
  }

  //输出数字页码
  for($j=1;$jpagecount;$j++)
  {
   if($j == $this->page)
   {
    $pagenav .= "".$j."  ";
   }
   else
   {
    $pagenav .= "".$j."  ";
   }
  }
  //下一页
  if($this->page pagecount && $this->pagecount >1)
  {
   $pagenav .= "下一页  ";
  }
  return $pagenav;
 }
 //获取url地址
 public function geturl()
 {
  $url = $_server['request_uri'];
  $parse_url = parse_url($url);
  $query_url = $parse_url['query'];
 
  if($query_url)
  {
   $query_url = ereg_replace("(^|&)".$this->pagevar."=".$this->page,"",$query_url);
   $url = str_replace($parse_url['query'],$query_url,$url);
   if($query_url)
   {
    $url .= "&".$this->pagevar;
   }
   else
   {
    $url .= $this->pagevar;
   }
  }
  else
  {
   $url .= "?".$this->pagevar;
  }
  return $url;
 }
}

$content = "第一页:文章内容分页阿斯顿浪费空间阿斯顿来看福建省地方吉林省福建路口附近大手拉飞机上浪费的说浪费监理费
第二页:阿斯顿房间阿双方了解啊对萨拉开发记得谁来付款将令对方空间的来福建阿里是否
第三页:欧文炯诶哦生地拉开方面来看就继续超文章内容分页滤机蓝卡
第四页:欧文日据拉萨及发动四分啊就双方的将爱是发觉是文章内容分页否了。";
$model = new contentpage($content);
echo $model->getpage();  //输出分页内容
echo $model->getpagenav(); //输出页码
?>

更多详细内容请查看:http://www.bKjia.c0m/phper/php-gj/35233.htm

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/631578.htmlTechArticle下面我来分析了长文章分页与文章分页程序代码,有需要的朋友可参考参考。 办法一、按字数控制进行分页 按字数分页办法简单易用,但效...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。