PHP 长文章分页的简单示例

前端之家收集整理的这篇文章主要介绍了PHP 长文章分页的简单示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
感兴趣PHP文章分页的简单示例的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧。<br>

如何分页

手动分页:一般在编辑内容时加入特殊分页标记,如{pages},提交后,PHP程序会根据分页符处理分页生成不同的静态页面。这种分页方法分页准确,但是需要人工手动添加分页符,工作量大。

自动分页PHP程序会根据设置好的分页符将内容进行分页,然后生成不同的静态页面。该方法效率高,对处理不同的HTML代码标签要求高。

前端JS分页:使用Javascript将长文章内容截取分段,根据请求展示不同的分段内容,达到分页效果。这种方法一次将内容读取,由前端js处理分页,体验好。

本文实例代码讲解的是采用PHP将长文章内容分页,可以自动和手动分页。至于生成静态html页面不在本文讲解范围内,后面我们会专门讲解生成静态方面的文章介绍。

分页

  1. /**
  2. * @param
  3. * @author 编程之家 jb51.cc jb51.cc
  4. * 长文章分页
  5. */
  6. class cutpage{
  7. private $pagestr; //被切分的内容
  8. private $pagearr; //被切分文字的数组格式
  9. private $sum_word; //总字数(UTF-8格式的中文字符也包括)
  10. private $sum_page; //总页数
  11. private $page_word; //一页多少字
  12. private $cut_tag; //自动分页
  13. private $cut_custom; //手动分页
  14. private $ipage; //当前切分的页数,第几页
  15. private $url;
  16. function __construct($pagestr,$page_word=1000){
  17. $this->page_word = $page_word;
  18. $this->cut_tag = array("</table>","</div>","</p>","<br/>","”。","。",".","!","……","?",",");
  19. $this->cut_custom = "{nextpage}";
  20. $tmp_page = intval(trim($_GET["ipage"]));
  21. $this->ipage = $tmp_page>1?$tmp_page:1;
  22. $this->pagestr = $pagestr;
  23. }
  24. function cut_str(){
  25. $str_len_word = strlen($this->pagestr); //获取使用strlen得到的字符总数
  26. $i = 0;
  27. if ($str_len_word<=$this->page_word){ //如果总字数小于一页显示字数
  28. $page_arr[$i] = $this->pagestr;
  29. }else{
  30. if (strpos($this->pagestr,$this->cut_custom)){
  31. $page_arr = explode($this->cut_custom,$this->pagestr);
  32. }else{
  33. $str_first = substr($this->pagestr,$this->page_word); //0-page_word个文字 cutStr为func.global中的函数
  34. foreach ($this->cut_tag as $v){
  35. $cut_start = strrpos($str_first,$v); //逆向查找第一个分页符的位置
  36. if ($cut_start){
  37. $page_arr[$i++] = substr($this->pagestr,$cut_start).$v;
  38. $cut_start = $cut_start + strlen($v);
  39. break;
  40. }
  41. }
  42. if (($cut_start+$this->page_word)>=$str_len_word){ //如果超过总字数
  43. $page_arr[$i++] = substr($this->pagestr,$cut_start,$this->page_word);
  44. }else{
  45. while (($cut_start+$this->page_word)<$str_len_word){
  46. foreach ($this->cut_tag as $v){
  47. $str_tmp = substr($this->pagestr,$this->page_word); //取第cut_start个字后的page_word个字符
  48. $cut_tmp = strrpos($str_tmp,$v); //找出从第cut_start个字之后,page_word个字之间,逆向查找第一个分页符的位置
  49. if ($cut_tmp){
  50. $page_arr[$i++] = substr($str_tmp,$cut_tmp).$v;
  51. $cut_start = $cut_start + $cut_tmp + strlen($v);
  52. break;
  53. }
  54. }
  55. }
  56. if (($cut_start+$this->page_word)>$str_len_word){
  57. $page_arr[$i++] = substr($this->pagestr,$this->page_word);
  58. }
  59. }
  60. }
  61. }
  62. $this->sum_page = count($page_arr); //总页数
  63. $this->pagearr = $page_arr;
  64. return $page_arr;
  65. }
  66. //显示上一条,下一条
  67. function pagenav(){
  68. $this->set_url();
  69. $str = '';
  70. //$str .= $this->ipage.'/'.$this->sum_page;
  71. for($i=1;$i<=$this->sum_page;$i++){
  72. if($i==$this->ipage) {
  73. $str.= "<a href='#' class='cur'>".$i."</a> ";
  74. }else{
  75. $str.= "<a href='".$this->url.$i."'>".$i."</a> ";
  76. }
  77. }
  78. return $str;
  79. }
  80. function set_url(){
  81. parse_str($_SERVER["QUERY_STRING"],$arr_url);
  82. unset($arr_url["ipage"]);
  83. if (empty($arr_url)){
  84. $str = "ipage=";
  85. }else{
  86. $str = http_build_query($arr_url)."&ipage=";
  87. }
  88. $this->url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str;
  89. }
  90. }
以上cutpage类可以非常好的处理内容分页,能处理不同html标签分页带来的麻烦。如果内容设置了分页符{nextpage},则会优先自动内容分页分页

调用分页


我们假设读取了文件text.txt的文章内容,实际项目中应该是表单提交长内容或者读取数据库相关表的内容。然后实例化分页类,然后根据当前页调用对应分页内容输出,以及输出分页条。
  1. $content = file_get_contents('text.txt');     
  2.     $ipage = $_GET["ipage"]? intval($_GET["ipage"]):1;     
  3.     $CP = new cutpage($content);     
  4.     $page = $CP->cut_str();   
  5.     echo $page[$ipage-1];    
  6.     echo $CP->pagenav(); 

值得注意的是,使用统一UTF-8的文件编码,会让你的编码工作更加顺畅。

猜你在找的PHP相关文章