首页 > 开发 > PHP > 正文

如何简化php模板页面中分页代码的解析

2024-05-04 22:59:02
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • ------------------------
    ------------------------
    这篇文章主要是针对“使用模板的情况”写的,
    但是这种方法适合于任何的场合,在任何情况下都是一种比较好的解决方案
    ------------------------
    ------------------------
    在使用模板的时候,会遇到这么一个问题:显示分页信息时操作麻烦,n多个模板都有分页块。
    例如:
    ---共 20 条记录,当前 3/5 页 首页 上一页 下一页 尾页 go-----
    初遇到这个问题的道友,在考虑解决这个问题的时候好像都是在打php的主意,考虑怎么用php来实现,但是不管你是怎么设计都后设计成两种方案
    1、用嵌套循环来实现
    2、用n多个判断来搞
    但是最终还是比较麻烦的,而且解析的时候是用的服务器端的资源。

    不妨换个方法用javascript来代替你的php!!!!,这样即可减少php脚本的代码量,还可以把解析分页的工作交给客户端自己来作。不过javascript调试起来可能会比较麻烦。
    最重要的是可以简化分页显示时,解析模板遇到的痛苦。
    下面用一个支持pear的itx模板工具解析的模板.
    其中<!-- begin page -->和<!-- end page -->表示一个块,{recordcount}这种类似的字符串是变量。

    ----------------list.tpl---------------------
    //其它的html代码
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
     <tr>
      <td align="right" nowrap>
       <script src="images/page.js" language="javascript"></script>
       <script language="javascript">
       <!-- begin page -->
        recordcount = {recordcount};
        show = {showinonepage}
        pagecount = {pagecount};
        pagenow = {page};
        pagestr = "?page=_page_";
        document.write(showlistpage0(recordcount, show, pagecount, pagenow, pagestr));
       <!-- end page -->
       </script>
      </td>
     </tr>
    </table>
    //其它的html代码

    --------------------page.js------------
    //---------------共 20 条记录,当前 3/5 页 首页 上一页 下一页 尾页 go-------------------
    //recordcount = 20;
    //show = 20
    //pagecount = 5;
    //pagenow = 3;
    //pagestr = "?page=_page_";
    //document.write(showlistpage(recordcount, show, pagecount, pagenow, pagestr));
    function showlistpage0(recordcount, show, pagecount, pagenow, pagestr){
     if(pagecount<1) pagecount =0;
     if(pagenow<1)  pagenow = 0;
     str = '<form name="frmpage">共 <b>'+recordcount+'</b> 条记录,当前 <b>'+pagenow+'/'+pagecount+'</b> 页';
     if(pagenow<=1)
      str += " 首页 ";
     else
      str += " <a href='"+pagestr.replace("_page_",1)+"'>首页</a> ";
     if(pagenow<=1)
      str += " 上一页 ";
     else
      str += " <a href='"+pagestr.replace("_page_",(pagenow-1))+"'>上一页</a> ";
     if(pagenow>=pagecount)
      str += " 下一页 ";
     else
      str += " <a href='"+pagestr.replace("_page_",(pagenow+1))+"'>下一页</a> ";
     if(pagenow>=pagecount)
      str += " 尾页 ";
     else
      str += " <a href='"+pagestr.replace("_page_",pagecount)+"'>尾页</a> ";
     str += "跳到<input type=/"text/" name=/"txtpage/" size=/"3/">页";
     str += "<input type=/"button/" value=/"go/" onclick=/"pagego0(document.frmpage.txtpage.value,"+pagenow+","+pagecount+",'"+pagestr+"')/"></form>";
     return str;
    }
    function pagego0(pagego,pagenow,pagecount,pagestr){
     if(pagego>=1 && pagego<=pagecount && pagenow!=pagego)
      window.location = pagestr.replace("_page_", pagego);
    }

    ----------------------------
    另外这种方法即使不用模板,也可以用,也一样是一种好的分页解决方案,只要将{recordcount}这种类似的字符串用变量的值替换就可以了。
    ----------------------------


    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表