分页模板简化操作,测试很方便,研究出来不敢独享

#1 anythink

先上一张图,具体效果如下:


未命名.jpg


请将如下代码加入spModel.php 文件的 spPager 分页类中,SP使用3.1.66版本




/**获取html版本的分页**/
public function pagerHtml($c='main',$a='index',$filter=Null)
{
$pager =$this->getPager();
$pages = $this->makepage($pager); //获得截断的pages
$pageHtml = Null;

if($pager)
{
//显示头部
if($pager['current_page'] != $pager['first_page'])
{
$pageHtml .= '« 第一页
« 上一页';
}

//显示中间
foreach($pages as $thepage)
{
if($thepage != $pager['current_page'])
{
$pageHtml .= ''.$thepage.' ';
}else{
$pageHtml .= ''.$thepage.'';
}
}

//显示尾页
if($pager['current_page'] != $pager['last_page'])
{
$pageHtml .= '下一页 »
尾页 »';
}
$pageHtml .= $pager['total_count'].'/'.$pager['total_page'].'/'.$pager['page_size'];
}

return $pageHtml;

}

/*进行页码截断*/
private function makepage($pager, $offset = 4) //这里的$offset表示当前页的左右偏移量
{
$start = 1;
$end = $offset * 2+1;
if ($pager['current_page'] > $offset)
{
$start = $pager['current_page'] - $offset;
$end = $pager['current_page'] + $offset;
}
if ($end > $pager['total_page'])
{
$start = $pager['total_page'] - $offset * 2;
$end = $pager['total_page'];
}

if ($start < 1) $start = 1;
return array_slice($pager['all_pages'], $start - 1, $end - $start+1, true);
}



程序中如何写?

如下:
$this->pager = $db->spPager()->pagerHtml('adminacl','',array('filter'=>'123','test'=>'333'));

将原先的getPager,改成pagerHtml

pagerHtml支持三个参数
* @param c   控制器
* @param a   模块
* @param filter   数组,分页附加的参数,做多参数翻页时候必用!


视图中如何些?

如下:

<{$pager}>


搞定!

2011-05-26 17:15:08

#2 jake

这里提两个建议:
1. 上面的做法把HTML代码放到MODEL层,不符合MVC结构的做法。建议是把这些HTML放到smarty的函数里面——因为HTML是属于VIEW层的,论坛里面有几个相关的例子,可以搜索一下使用。
2. 建议不要修改框架文件,如果自定义功能,可以参考SpeedPHP的手册相关说明,按规则进行扩展。

2011-05-26 18:29:46

#3 anythink

谢谢jake的解答, 因为注册到视图里面比较复杂一时没看懂 所以就用这个简单的方法来实现了

2011-05-27 11:39:03

#4 jake

其实如果你了解了注册函数到模板,那么上面的方法可以写得更简单。而且适用性更强,直接可以把函数放到别的项目里面用。:loveliness:

2011-05-27 12:50:23

#5 anythink

昂~~ 这样啊~~~~

2011-05-27 12:56:27