再谈***分页显示***问题(主要用于模板)

hahawen 2004-04-26 09:39:34
------------------------
------------------------
这篇文章主要是针对“使用模板的情况”写的,
但是这种方法适合于任何的场合,在任何情况下都是一种比较好的解决方案
------------------------
------------------------
在使用模板的时候,会遇到这么一个问题:显示分页信息时操作麻烦,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}这种类似的字符串用变量的值替换就可以了。
----------------------------
...全文
84 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mistruster 2004-04-27
  • 打赏
  • 举报
回复
呵呵,不错…
我是没想过用JavaScript来实现分页^_^

-----------------
我写的分页函数:
<?
function echo_page_info($URL, $page, $count, $pagesize=30, $pagename="page", $URL_Param="", $area=10)
{
$area = intval($area); //每区显示几页
if($area < 4)$area = 4;
$page = intval($page); //当前页
if($page < 1)$page = 1;
$maxpage = ceil($count / $pagesize); //最大页数
if($maxpage == 0)$maxpage = 1;
if($page > $maxpage)$page = $maxpage;
$start = ($page - 1) * $pagesize; //起始点
$areapage = ceil($page / $area); //第几区
$prevPage = ($areapage - 2) * $area + 1; //上一区第一页
$nextPage = $areapage * $area + 1; //下一区第一页
$startpage = ($areapage - 1) * $area + 1; //本区起始页
if($prevPage>0)
$thepage= "<a class=normal href=".$URL."?".$pagename."=".$prevPage.$URL_Param.">[<<]</a> ";
for($i=$startpage; $i<$startpage + $area; $i++)
{
if($i>$maxpage)break;
if($i==$page)$thepage.= "<font color=blue>[$i]</font> ";
else $thepage.= "<a class=normal href=".$URL."?".$pagename."=".$i.$URL_Param.">[$i]</a> ";
}
if($nextPage<=$maxpage)
$thepage.= "<a class=normal href=".$URL."?".$pagename."=".$nextPage.$URL_Param.">[>>]</a>";
$result["thepage"] = $thepage;
$result["total"] = $count;
$result["start"] = $start;
$result["page"] = $page;
$result["maxpage"] = $maxpage;
return $result;
}

//在模板调用时只需
$pageinfo = echo_page_info("xxxx.php", $page, $count, $pagesize);
$xtpl->assign("page", $pageinfo);
?>

xxxx.html模板页:
<!-- BEGIN: page -->
共 {page.total} 条/ {page.maxpage} 页  目前为第 {page.page} 页
分页: {page.thepage}
<!-- END: page -->
flyonet 2004-04-27
  • 打赏
  • 举报
回复
up
feixuehenshui 2004-04-27
  • 打赏
  • 举报
回复
高产选手
mistjin 2004-04-27
  • 打赏
  • 举报
回复
来捧场了!
雷锋啊!
countstars 2004-04-27
  • 打赏
  • 举报
回复
模板?和模板没关系吧?
类,封装的时候就不应该把HTML封进去,但是我看到现在很多分页类都连HTML一块封了。这样维护性就差了。修改起来也麻烦。建议看一下PEAR::DB::Pager这个类
allkill 2004-04-27
  • 打赏
  • 举报
回复
和我以前处理模板分类的方法差不多!

不过我不用javascript控制!
flyfeicsdn 2004-04-27
  • 打赏
  • 举报
回复
高手可不可以谈谈你的开源项目?
chinaworker 2004-04-26
  • 打赏
  • 举报
回复
晕死

你怎么想得跟我一样啊


我的显示器坏了,在等客户打钱买显示器。

还以为买了就开工 :(

没有想到有人想得跟我一样 .........
hahawen 2004-04-26
  • 打赏
  • 举报
回复
呵呵,最近在考虑整理一下自己东西,写一个开源的项目,支持各种模块功能的即插即用功能,相当于一个大的自助网站。但是没有时间,所以就先整理点零碎的东西,呵呵。见笑见笑
chinaworker 2004-04-26
  • 打赏
  • 举报
回复
你真是精神可嘉啊

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧