SMARTY分页插件

来源:互联网 发布:默读 priest知乎 编辑:程序博客网 时间:2024/05/17 07:29

找了个SMARTY分页插件的例子,先放在这,抽时间看下:

<?php/** * Smarty plugin * @package Smarty * @subpackage plugins * @分页插件,robinhong于2008-09-09 * @example:{{page values=$RS_PAGE output="共有<span>%recordcount</span>条记录 每页<span>%pagesize</span>条记录 第<span>%pagenum</span>页/共%pagecount页 %first %prev %next %last %select %list" first="首页" prev="上页" next="下页" last="末页" select="第%pagenum页" list=5}} */function smarty_function_page($params, &$smarty){    if (!isset($params['values']) && !isset($params['output'])) {        $smarty->trigger_error("array: missing 'values' or 'output' parameter");        return;    }    if($params['values'] == '' || !is_array($params['values'])) {        return $params['values'];    }    return page($params);}function page($a){//select分页$ps="<select name=/"GotoPage/" onChange=/"location=this.options[this.selectedIndex].value/">";for($p=1;$p<=$a['values'][pagecount];$p++){$Sel="";if($a['values'][page]==$p){$Sel=" selected";}$ps=$ps."<option value=/"".$a['values'][pagelink].$p."/"$Sel>".str_replace("%pagenum",$p,$a['select'])."</option>";}$ps=$ps."</select>";//数字链接分页if($a['list']>0){$pageStart=$a['values'][page]>$a['list']?$a['values'][page]-$a['list']:1;$pageEnd=$a['values'][page]+$a['list']>$a['values'][pagecount]?$a['values'][pagecount]:$a['values'][page]+$a['list'];}else{$pageStart=1;$pageEnd=$a['values'][pagecount];}for($p=$pageStart;$p<=$pageEnd;$p++){if($a['values'][page]==$p){$pl=$pl."<span>".$p."</span>";}else{$pl=$pl." <a href=/"".$a['values'][pagelink].$p."/">".$p."</a> ";}}//上下页链接分页if($a['values'][pagecount]>1){if($a['values'][page]==1){$pt=array($a['first'],$a['prev'],"<a href=/"".$a['values'][pagelink].intval($a['values'][page]+1)."/">".$a['next']."</a>","<a href=/"".$a['values'][pagelink].$a['values'][pagecount]."/">".$a['last']."</a>");}elseif($a['values'][page]==$a['values'][pagecount]){$pt=array("<a href=/"".$a['values'][pagelink]."1/">".$a['first']."</a>","<a href=/"".$a['values'][pagelink].intval($a['values'][page]-1)."/">".$a['prev']."</a> ",$a['next'],$a['last']);}else{$pt=array("<a href=/"".$a['values'][pagelink]."1/">".$a['first']."</a>","<a href=/"".$a['values'][pagelink].intval($a['values'][page]-1)."/">".$a['prev']."</a>","<a href=/"".$a['values'][pagelink].intval($a['values'][page]+1)."/">".$a['next']."</a>","<a href=/"".$a['values'][pagelink].$a['values'][pagecount]."/">".$a['last']."</a>");}}else{$pt=array($a['first'],$a['prev'],$a['next'],$a['last']);}$out=$a['output'];$out=str_replace("%recordcount",$a['values'][recordcount],$out);$out=str_replace("%pagesize",$a['values'][pagesize],$out);$out=str_replace("%pagenum",$a['values'][page],$out);$out=str_replace("%pagecount",$a['values'][pagecount],$out);$out=str_replace("%first",$pt[0],$out);$out=str_replace("%prev",$pt[1],$out);$out=str_replace("%next",$pt[2],$out);$out=str_replace("%last",$pt[3],$out);$out=str_replace("%select",$ps,$out);$out=str_replace("%list",$pl,$out);return $out;}?>

Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。

smarty的插件有function, modifier, block, compiler,prefilter, postfilter, outputfilter, resource, insert等几种类型, 本文中我们只使用function型插件。

代码请看function.page.php

主要有三种分页效果,select分页,数字链接分页,上下页链接分页。

模板里调用示例

{{page values=$RS_PAGE output=”共有<span>%recordcount</span>条记录 每页<span>%pagesize</span>条记录 第<span>%pagenum</span>页/共%pagecount页 %first %prev %next %last %select %list” first=”首页” prev=”上页” next=”下页” last=”末页” select=”第%pagenum页” list=5}}

说明一下 values是要传入的分页数据信息,$RS_PAGE=$arrPage[recordcount,pagesize,page,pagecount,pagelink],分别是数据记录总数、每页记录数、当前页、总页数、分页链接文件。output是分页显示的效果,想要显示不同的分页效果直接在模板里修改这个参数的值就可以。

下面看一下实际效果

http://demo.robinhong.cn/smarty-page/smarty-page.php

原创粉丝点击