SMARTY分页插件

找了个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值