Smarty的分页实现

Smarty中的分页有很多方法。
1。使用Smarty的分页插件,如Pager,pagnition,sliding_page等,不过感觉都不是太好,几乎都有一些Bug。
有兴趣试用和自己去改进的朋友可以看看:
http://smarty.php.net/contribs/plugins/view.php/function.pager.php
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=2327
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=1604

2。使用分页类库,呵呵,这个网上就太多了,一大把,不过我还没有发现写得很好的,特别是容易扩展的。
在搜索的时候还看到一个号称分页类终结者的,哈哈,有点好笑。分页类中把SQL都包含进去了,这个是绝对不能容忍的,可以说作者对OO的认识还比较浅。

不过分页类库不一定适合Smarty,特别是当记录集数据是二维数组时,我不想放弃Smarty方便的Section。这是我没有用PEAR::Pager的原因,否则还要先对数组进行处理,也很麻烦。

3。自己写啦。。我暂时没有选择写成类库,不过改写很容易,下面主要讲讲思路。

其实Smarty的分页非常简单,首先我们可以在模板中这样实现:
{$pager_Links}
{section name="list" loop=$productID start=0 max=$pager_Total step=1}
{if ($smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )}
产品名称:{$productName[list]} 
产品类别:{$catalogName[list]}
{/if}
  {/section}

以上就可以将一个记录集(二维数组)轻松地打印出来,而且限定每页的显示范围。
{$pager_Links} 分页标签(就是上一页,下一页等)
max=$pager_Total  记录总数
$smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )
这一行是用来限定记录的显示范围的,如果记录的索引落在这个范围之内就显示出来,否则就不显示。

以上可以看出,在PHP文件中,我们只需要传递4个变量给Smarty对象:
1.记录总数
2.每页记录起始数
3.每页记录结束数
4.分页标签

以下代码代参考:
标签可以自己去写了,可以扩充成更强大的。现在我没有时间,不然会写一个
<?php
$smartyArr = $smarty->get_template_vars();
        
        //记录总数,每页显示记录条数,总页数
        $pager_Total = count($smartyArr[‘productID‘]);
        $pager_Size = 10;
        $pager_Number = ceil($pager_Total/$pager_Size);
        $pager_URL = "index.php?action=View";
        
        //当前页的页数,从REQUEST获得
        if(isset($_GET[‘pager_PageID‘])&& !empty($_GET[‘pager_PageID‘])){
            $pager_PageID = intval($_GET[‘pager_PageID‘]);
        }else{
            //第一次访问
            $pager_PageID = 1;
        }

//每页的起,始记录数
        if ($pager_PageID == 1 ) {
            $pager_StartNum = 0;
        } else {
             $pager_StartNum = ($pager_PageID -1) * $pager_Size;
        }    
        
        $pager_EndNum = $pager_StartNum + $pager_Size;

if ($pager_PageID == 1 && $pager_Number>1) {
            //第一页
            $pager_Links = "上一页 | <a href=".$pager_URL."&pager_PageID=".($pager_PageID+1).">下一页</a>";
        } elseif($pager_PageID == $pager_Number && $pager_Number>1) {
            //最后一页
             $pager_Links = "<a href=".$pager_URL."&pager_PageID=".($pager_PageID-1).">上一页</a> | 下一页";
        } elseif ($pager_PageID > 1 && $pager_PageID <= $pager_Number) {
            //中间
             $pager_Links = "<a href=".$pager_URL."&pager_PageID=".($pager_PageID-1).">上一页</a> | <a href=".$pager_URL."&pager_PageID=".($pager_PageID+1).">下一页</a>";
        } else {
             $pager_Links = "上一页 | 下一页";
        }

$smarty->assign(‘pager_Total‘,$pager_Total);        
        $smarty->assign(‘pager_StartNum‘,$pager_StartNum);
        $smarty->assign(‘pager_EndNum‘,$pager_EndNum);
        $smarty->assign(‘pager_Links‘,$pager_Links);

return $smarty->fetch ("list.tpl");        
?>

转自:https://blog.csdn.net/haohappy2004/article/details/510196

原文地址:https://www.cnblogs.com/apolloren/p/8952845.html

时间: 2024-10-14 21:42:58

Smarty的分页实现的相关文章

无刷新分页技术,Ajax+smarty

这里运用Smarty模板,更简单 本文主要的技术:AJAX,PHP,Smarty,另外自己封装了一个很简单的类 类: (function(){    function $(id) {        return document.getElementById(id);    }    $.init=function() {        try{return new XMLHttpRequest();}catch(e){};        try{return new ActiveXObject

smarty+php+ajax 简单无刷新分页

简介 分页,无非就是从数据库中获得我们想查询的数据,再加以处理即可! ① 确定数据总数($count) ② 每页显示数据条数($pageSize) ③ 分多少页($pageCount) ④ 上一页($pagePrev) ⑤ 下一页($pageNext) ⑥ 判断越界问题 ⑦ 偏移量($offset) ⑧ sql语句($sql = "select * from goods limit $offset,$pageSize";) 简单归简单,我们还得考虑实际的应用.例如:如果你正在土豆网看&

smarty模板调数据库并做添加删除修改和分页

smarty模板只要就是实现分离效果所以每个功能都需要两个页面一个是HTML  和 PHP  两部分组成 使用smarty模板要在main文件夹下面创建login.php文本,要用smarty模板首先引入入口文件, <?php include("../init.inc.php"); //引入入口文件 //var_dump($smarty);// $smarty->display("login.html");//用来在模板显示用户看到的内容 登录页面在sm

夺命雷公狗---Smarty NO:21 分页

在smarty里面写一个分页 demo6.php代码示例: <?php header(“Content-Type:text/html;charset=utf-8″); require “smarty/Smarty.class.php”; $smarty = new Smarty(); //连接数据库 mysql_connect(“localhost”,’root’,”); mysql_query(‘use xsphp’); mysql_query(‘set names utf8′); //读取所

第一个smarty例子--分页显示数据

模板页index.tpl: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv=&qu

PHP Smarty 页面静态化加分页和缓存控制

PHP页面 <?php  //打开输出控制缓冲 ob_start(); //新建模板文件 $file = "./cache/newindex{$_GET['page']}.html"; $cachetime = 10; const  DSN = 'mysql:host=localhost;dbname=test'; const   DBUSER = 'root'; const   DBPWD     = 'root'; //模板不存在或者超过缓存时间才生成缓存模板 if(!fil

smarty 分页查询

对查出的数据进行分页,并添加查询 在main.php和main.html两个页面操作: 后台:main.php 1 <?php 2 include("../init.inc.php"); 3 4 include("../../DBDA.class.php"); 5 $db = new DBDA(); 6 include("../../page.class.php"); 7 8 //造查询条件 9 $tj = " 1=1 "

Smarty 分页

1 <div id="pagelist" class="clearfix">2     <a href="/canadian-sailing-team-p191117&preview=1&pager=1">First</a> //第一页3     {if $pagerInfo.currentPage > 1} //如果当前页大于1,则有pre链接4         <a href=&

Smarty的应用

smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.inc.php这是入口文件(3)plugins:自己写的插件文件夹(4)templates_c:存放编译好的文件(5)int.inc.php这是入口文件(6)定义好常量:不能修改 二.怎么用模板? 模板页面1.引入模板的入口文件include("入口文件路径位置"); 2.直接用对象提供一个方法:向模板中注册变量的方法(assign(名字,值)$smarty->assign