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

Smarty的分页实现的更多相关文章

  1. PHP+MySQL Smarty简单分页显示示例

    一.分页程序的原理 分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page). 有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在m ...

  2. smarty分页模板(用模板语法写分页)

    分页是一个我们经常要用到的.比较基本的小功能,你可以通过定义一个方法或类来对它进行封装.重用.而本文则是通过利用smarty独有的语法,以模版的方式进行封装,从而达到同样的目的. 下面开始具体实现步骤 ...

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

    smarty模板只要就是实现分离效果所以每个功能都需要两个页面一个是HTML  和 PHP  两部分组成 使用smarty模板要在main文件夹下面创建login.php文本,要用smarty模板首先 ...

  4. smarty实例登陆、显示、分页

    1.先建立登陆页面,登陆页面的PHP文件和HTML文件是分开写的. 先建立一个登陆页的PHP文件, <?php include("../init.inc.php");//引入 ...

  5. 2016/05/05 smarty ①分页 ② 查询后分页 ③缓存

    samrty  分页   查询后分页 0505fch.php <?php include("init.inc.php"); include("DBDA.php&qu ...

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

    模板页index.tpl:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  7. smarty 练习: 分页查询

    对查出的数据进行分页,并添加查询 在main.php和main.html两个页面操作: 后台:main.php <?php include("../init.inc.php" ...

  8. 用smarty模板做数据实现修改、分页等功能

    先来看怎么把数据库的列表全都显示出来 还是要先建一个php文件,还有html文件,都存到相应的目录下 php文件中 <?php include("../init.inc.php&quo ...

  9. Smarty 分页

    1 <div id="pagelist" class="clearfix">2     <a href="/canadian-sai ...

随机推荐

  1. git日常命令

    克隆项目:git clone addr dir 切换分支,分支并没有 git checkout -b production origin/production 分支已存在,单纯切换分支 git che ...

  2. 【OGG 故障处理】OGG-01031

    故障原因 -------------------- 网络异常,导致DP进程异常中断   故障现象 -------------------- 源端DP 进程全部挂起,且启动失败 GGSCI 34> ...

  3. less运算

    less里面是可以有运算的,任何数字,颜色或者变量都可以参与与暗算,运算应该被包裹在括号中.   @test_width:300px; .box_width{ width: (@test_width ...

  4. JDK源码那些事儿之我眼中的HashMap

    源码部分从HashMap说起是因为笔者看了很多遍这个类的源码部分,同时感觉网上很多都是粗略的介绍,有些可能还不正确,最后只能自己看源码来验证理解,写下这篇文章一方面是为了促使自己能深入,另一方面也是给 ...

  5. [Visual Studio] 自定义项目模板(.vsix扩展)

    VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...

  6. ActiveMQ之JMS及保证消息的可靠性<持久化、事务、签收>(三)

    1.JAVAEE 是一套使用Java 进行企业级开发的13 个核心规范工业标准 , 包括: JDBC  数据库连接 JNDI  Java的命名和目录接口 EJB   Enterprise java b ...

  7. Java并发包--ConcurrentLinkedQueue

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3498995.html ConcurrentLinkedQueue介绍 ConcurrentLinkedQ ...

  8. Java8-Executors-No.02

    import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import ...

  9. Miller-Rabin素性测试

    有时候我们想快速的知道一个数是不是素数,而这个数又特别的大导致 $O(\sqrt n)$ 的算法也难以通过,这时候我们可以对其进行 Miller-Rabin 素数测试,可以很大概率测出其是否为素数. ...

  10. 洛谷P1330 封锁阳光大学【dfs】

    题目:https://www.luogu.org/problemnew/show/P1330 题意:一个无向边,一个河蟹可以占领一个点,但一个点只能被一个河蟹占领. 占领了一个点之后,这个点所有的边都 ...