用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

PHP新闻内容分页类

最近要实现一个PHP新闻内容分页类,找了老半天竟然找不到满意的东东,根据一些网友提供的思想,自己动手写了个内容分页类.贴在这里各位PHPer交流一下,给些意见!
类可保存为content2page.class.php
  1. <?php
  2. /********************************************************
  3. *类名:content2page.class.php
  4. *描述:用于自动生成新闻静态页,手动添加分页功能,自动生成页码
  5. *作者:程相闯
  6. *日期:2006-11-27 14:20
  7. *联系:cxc-0378@163.com

  8. 使用示例:
  9. $con2page = new Content2Page;
  10. $con2page->FileName = "";  //生成静态文件名
  11. $con2page->FileDir = "html/";  //生成静态页面存放的目录文件夹,若不为空则要在末尾加“/”
  12. $con2page->TemplateName = "";  //模班文件名
  13. $con2page->Content = "";  //新闻内容,一般用POST或GET传递
  14. $con2page->Content2Html();
  15. *******************************************************/
  16. class Content2Page
  17. {
  18. var $FileName = "test";//生成静态页面的文件名,默认为test
  19. var $FileDir = "";//生成静态页面存放的目录文件夹,若不为空则要在末尾加“/”
  20. var $TemplateName = "template.html";//调用模班页面名称,默认为template.html
  21. var $NewsPage = "";//新闻分页
  22. var $Content = "";//新闻内容
  23. var $SplitSymbol = "*分页符*";//内容分页符,默认为“*分页符*”
  24. var $NowPage = "";//当前页面
  25. var $CountPage = "";//总分页数

  26. /*************************************************
  27.    Function:      Content2Html()
  28.    Description:  用来将新闻内容分页输出
  29.    Calls:        ReadFromFile(),Write2File(),GetPageCount()
  30.    Input:        含分页符的新闻内容
  31.    Output:       已经分页的HTML静态页面
  32.    Return:     void
  33.    Access:    public
  34. *************************************************/
  35.   function Content2Html()
  36.   {
  37.    $FileNameTemp = $this->FileName;
  38.    if ($_POST['Submit'])
  39.    {
  40.     if($this->Content=="")
  41.       {
  42.         echo "请输入内容";
  43.         exit;
  44.       }
  45.       $ContentTemp = explode($this->SplitSymbol, $this->Content);
  46.       $this->CountPage = count($ContentTemp);
  47.       //文件操作
  48.       for($k = 0 ; $k <= $this->CountPage-1 ; $k++)
  49.       {
  50.         /*******判断页数,成生页码 BEGIN***********/
  51.         if ($this->CountPage > 1)
  52.         {
  53.          //若不是单页新闻,需要显示分页信息
  54.           if ($k == 0)
  55.           {
  56.            $this->NowPage = 1;      //当前页
  57.            $this->NewsPage = $this->GetPageCount();
  58.           }
  59.          else
  60.          {
  61.             $this->NowPage = $k + 1;
  62.             $this->NewsPage = $this->GetPageCount();
  63.             $this->FileName = $this->FileName . "_" . $this->NowPage;
  64.          }
  65.        }
  66.      /**************生成页码 END *************/
  67.      //将内容写入模班
  68.         $read=$this->ReadFromFile($this->TemplateName);
  69.         $read=str_replace("{Content}",$ContentTemp[$k],$read);
  70.         $read=str_replace("{NewsPage}",$this->NewsPage,$read);
  71.         $this->Write2File($read,$this->FileDir.$this->FileName . ".html");
  72.         $this->FileName = $FileNameTemp;//初始化文件名
  73.       }
  74.   }
  75.   }
  76.   /****************************************
  77.    Function:          ReadFromFile()
  78.    Parameter:  $name 文件名
  79.    Description:      用来读取文件内容
  80.    Called By:         Content2Html()
  81.    Input:               文件名
  82.    Output:            找到文件,读取起内容
  83.    Return:     $read 内容字符串
  84.    Access:    public
  85. *****************************************/  
  86.   function ReadFromFile($name)
  87. {
  88.     $f=@file($name);
  89.     if($f)
  90.     {
  91.       foreach($f as $in)
  92.        {
  93.          $read.=$in;
  94.        }
  95.     }
  96.     return $read;
  97. }
  98. /******************************************
  99.    Function:        Write2File()
  100.    Parameter:   $content 待写入的内容
  101.           $file 要写入的文件
  102.    Description:    用来写入文件内容
  103.    Called By:       content2html()
  104.    Return:      void
  105.    Access:     public                                          
  106. *******************************************/  
  107. function Write2File($content,$file)
  108. {
  109.     $fp=@fopen($file,"w");
  110.     @fputs($fp,$content);
  111.     @fclose($file);
  112. }

  113. /********************************************
  114.    Function:        GetPageCount()
  115.    Description:    分几种情况输出页面分页的格式
  116.    Calls:     GetColor()
  117.    Called By:       Content2Html()
  118.    Return:      $GetPageCount 自动分页字符串
  119.    Access:     public
  120. ********************************************/  
  121. function GetPageCount()
  122. {
  123.   //自动生成页码
  124.   //==========显示结果============
  125.   //上一页 1 2 3 下一页
  126.   //上一页 ... 4 5 6 下一页
  127.   //上一页 1 2 3 ... 下一页
  128.   //上一页 ... 4 5 6 ... 下一页
  129.   //==============================
  130.   $ShowPageNum = 7; //最好是单数,好看一些 ... 11 12 13 <14> 15 16 17 ...
  131.   $PageUp = "";
  132.   $PageDown = "";
  133.   $GetPageCount = "";
  134.    if($this->NowPage == 1)
  135.    {
  136.       $GetPageCount = $GetPageCount . "<a href='" . $this->FileName . ".html'><font color='#ff0000'><b>1</b></font></a> ";
  137.    }
  138.    else
  139.    {
  140.       $GetPageCount = $GetPageCount . "<a href='" . $this->FileName . ".html'>1</a> ";
  141.    }
  142.      
  143.    if($this->CountPage <= $ShowPageNum)
  144.    {
  145.      for ($i = 2; $i <= $this->CountPage; $i++)
  146.      {
  147.        $GetPageCount = $GetPageCount . "<a href='" . $this->FileName . "_" . $i . ".html'>" . $this->GetColor($i) . "</a> ";
  148.      }
  149.    }
  150.    else
  151.    {  
  152.      //页数大于自定义的显示页码数量
  153.       if ((($this->NowPage - 3) > 1) && (($this->NowPage + 3) < $this->CountPage))
  154.       {
  155.         $GetPageCount = "... ";
  156.         for ($i = $this->NowPage - 3; $i <= $this->NowPage + 3; $i++)
  157.         {
  158.           $GetPageCount = $GetPageCount . "<a href='" . $this->FileName . "_" . $i . ".html'>" . $this->GetColor($i) . "</a> ";
  159.         }
  160.         $GetPageCount = $GetPageCount . "...";
  161.       }
  162.       else
  163.       {
  164.         if ((($this->NowPage - 3) > 1) && (($this->NowPage + 3) >= $this->CountPage))
  165.         {
  166.           $GetPageCount = "... ";
  167.           for ($i = $this->CountPage - $ShowPageNum+1; $i <= $this->CountPage; $i++)
  168.           {
  169.            $GetPageCount = $GetPageCount . "<a href='" . $this->FileName . "_" . $i . ".html'>" . $this->GetColor($i) . "</a> ";
  170.           }
  171.         }
  172.         else
  173.         {
  174.           for ($i = 2; $i <= $ShowPageNum; $i++)
  175.           {
  176.            $GetPageCount = $GetPageCount . "<a href='" . $this->FileName . "_" . $i . ".html'>" . $this->GetColor($i) . "</a> ";
  177.           }
  178.           $GetPageCount = $GetPageCount . "...";
  179.         }
  180.       }
  181.    }
  182.    //加首头页尾
  183.    if($this->NowPage > 1)
  184.    {
  185.       if($this->NowPage > 2)
  186.       {
  187.         $PageUp = "<a href='" . $this->FileName . "_" . ($this->NowPage - 1) . ".html'>上页</a> ";
  188.       }
  189.       else
  190.       {
  191.         $PageUp = "<a href='" . $this->FileName . ".html'>上页</a> ";
  192.       }
  193.    }
  194.   
  195.    if ($this->NowPage < $this->CountPage)
  196.    {
  197.      $PageDown = "<a href='" . $this->FileName . "_" . ($this->NowPage + 1) . ".html'>下页</a> ";
  198.    }
  199.    $GetPageCount = "<a href='" . $this->FileName . ".html'>首页</a>  " . $PageUp . $GetPageCount . $PageDown . "<a href='" . $this->FileName . "_" . $this->CountPage . ".html'>末页</a>";
  200.    return $GetPageCount;
  201. }

  202. /*******************************************
  203.    Function:        GetColor()
  204.    Parameter:   $i 用来传递当前页面数
  205.    Description:    给当前页面标志醒目的颜色
  206.    Called By:       GetPageCount()
  207.    Return:      $GetColor 含当前页的字符串
  208.    Access:     public
  209. ********************************************/  
  210. function GetColor($i)
  211. {     
  212.    //当前页标志色
  213.     if($i == $this->NowPage)
  214.     {
  215.        $GetColor = "<font color='#ff0000'><b>" . $this->NowPage . "</b></font>";
  216.     }
  217.     else
  218.     {
  219.        $GetColor = $i;
  220.     }
  221.       return $GetColor;
  222. }
  223. }//end of class
  224. ?>
复制代码

[ 本帖最后由 cxc0378 于 2006-12-4 15:58 编辑 ]
昵称: cxc0378  时间: 2006-11-28 13:16:39
这里给出调用示例:如另存为test-page.php
  1. <?php
  2. include_once("content2page.class.php");
  3. $con2page = new Content2Page;
  4. $con2page->FileName = "test";//文件名,不要带后缀
  5. $con2page->FileDir = "html/";//生成静态页面存放的目录文件夹,默认为当前文件夹
  6. $con2page->TemplateName = "tmpl/Template1.html";//模班文件
  7. $con2page->Content = htmlspecialchars($_POST['Content']);//新闻内容
  8. $con2page->Content2Html();
  9. ?>
  10. <form name="form1" method="POST" action="">
  11.   <textarea name="Content" cols="100" rows="8"></textarea>
  12.   <input type="button" name="insert" value="插入分页" ōnClick="form1.Content.value+='*分页符*';form1.Content.focus();">
  13.   <input type="submit" name="Submit" value="提交">
  14. </form>
复制代码

Template1.html的内容你可以这样写:

  1. <div style="font-size:14px; line-height:150%">
  2. {Content}
  3. </div>
  4. <br />
  5. <div style="font-size:12px;" align="center">
  6. {NewsPage}
  7. </div>
复制代码
昵称: cxc0378  时间: 2006-11-28 13:18:47
不错。不过有些遗憾:
1.点击“插入分页符”后,只能在form1.Content.value的最后加入分页分割符;应该可以在其中某处任意加入,或者是根据form1.Content.value的Length来自动判断加入分隔符;

我测试来一下,会产生空白页!

希望更进一步!!

多谢!!!
昵称: ScottZhang  时间: 2006-11-28 16:40:14
是的,我只是把思想和方法提供出来,可以自己扩展哟!呵呵,共同进步:handshake
昵称: cxc0378  时间: 2006-11-28 18:15:43
:victory:
昵称: feifengxlq  时间: 2006-11-28 20:08:36
好东东要顶的:lol
昵称: HeavenWoo  时间: 2006-11-28 20:40:56
:victory: :victory: :victory: :victory:
昵称: forest  时间: 2006-11-28 20:47:40
:) 过年好
昵称: cxc0378  时间: 2007-01-03 11:02:12
:) 多谢共享,最近正好要用到这样的东西……
昵称: niohe  时间: 2007-01-03 13:17:21
:victory: :victory: :victory: :victory: :victory:
昵称: hqlong  时间: 2007-01-04 13:44:09
:victory: :)
昵称: loveathena  时间: 2007-01-04 14:19:30
学习了~
昵称: fly1983  时间: 2007-05-07 14:58:06
顶下 呵呵
昵称: wrs_1983  时间: 2007-05-07 15:03:21
正需要呢?谢谢了哈
昵称: webwlsong  时间: 2007-05-28 23:14:44
:victory:
昵称: ssww  时间: 2007-09-18 21:24:11
原帖由 ScottZhang 于 2006-11-28 16:40 发表
不错。不过有些遗憾:
1.点击“插入分页符”后,只能在form1.Content.value的最后加入分页分割符;应该可以在其中某处任意加入,或者是根据form1.Content.value的Length来自动判断加入分隔符;

我测试来一 ...

那位置高手把他完善一下呀
昵称: asu530  时间: 2007-09-19 16:31:45
自动分页要怎么分 比如大于5K 分页
昵称: blue5tar  时间: 2007-09-20 23:01:40
我就觉得新闻分页很神秘,一直想学!
昵称: 泥小鬼  时间: 2009-03-21 14:12:34
{:soso_e182:}
昵称: guoqi3278  时间: 2013-04-07 13:22:02
{:soso_e182:}
昵称: guoqi3278  时间: 2013-04-07 13:38:09
参考一下opencart的分页类吧。
昵称: Opencart  时间: 2013-05-29 22:32:20
发表评论
昵称:
内容:
验证: