+ -
当前位置:首页 → 问答吧 → SMARTY分页详解,希望听到掌声!!

SMARTY分页详解,希望听到掌声!!

时间:2006-05-07

来源:互联网

使用SMARTY进行分页遇到问题的人们,将从这里学到如何更好的在SMARTY中进行分页....首先必需说明的是:这篇教程是我从别的教程改过来的,所以不能说是完全原创,但我把它说明的更加详细,以及提供了完备的示例..你将很清楚的理解里的每个变量的作用及其使用方法....希望这篇文字对对你产生帮助....如果,下面的文字真的对你产生了帮助,别忘了"呱唧呱唧"(鼓掌哦)!!!
复制PHP内容到剪贴板
PHP代码:

<?php
require_once('include/common.inc.php');//这里是个接口common.inc.php里面包函了一些常用到的函数类库以及SMARTY
include_once('header.php');//调用头部信息,SESSION的信息全都保存在这里,这样做的好处是几乎所有的页面都不需要在开头输入session_start();
$smarty = new Smarty_Calvin;//调用这个对象
$smarty->caching = false;//不使用缓存
$swe = "SET NAMES gb2312;";//如果是使用MYSQL5的数据库的话,这样做是非常必要的。要不然极易出现乱码
  mysql_query($swe);
  //下面是数据库的关联查找,将得到数据库中的记录
  $sqle = "SELECT calvin.did,calvin.title,calvin.voidbulk,calvin.databulk,
                  calvin.place,calvin.price,calvin.line,calvin.explan,
                  calvin.identify,
                  idcof_extend.identify,idcof_extend.pid,idcof_extend.pid,idcof_extend.start,idcof_extend.end,idcof_extend.taxis
          FROM    calvin,extend
          WHERE   calvin.identify = idcof_extend.identify
          AND     calvin.did = extend.pid
          ORDER BY  extend.taxis DESC"; 
  $resulte = mysql_query($sqle) or die(mysql_error());
  $ie= mysql_num_rows($resulte);//得到结果集的数量
   //把结果集存到SMARTY可以用的数组中
   while(($rowe=mysql_fetch_array($resulte)) && $ie > 0)
   {
      $arraye[] = array("dide"=>$rowe["did"],"titlee"=>$rowe["title"],"voidbulke"=>$rowe['voidbulk'],"databulke"=>$rowe['databulk'],
                       "placee"=>$rowe['place'],"linee"=>$rowe['line'],"pricee"=>$rowe["price"],"explane"=>cutstr($rowe["explan"],180));//cutstr这个函数是自定义的,从COMMON。INC。PHP而来
      $ie--;
   }
   $smarty->assign('arraye',$arraye);//把数组指向模板
//下面的部分是本教程的重点。
   // get_template_vars返回一个指定的已赋值的模板变量的值
$smartyArr = $smarty->get_template_vars();
        //print_R($smartyArr);
        //记录总数,每页显示记录条数,总页数
        $pager_Total = count($smartyArr);//总记录数
        //echo $pager_Total;
        $pager_Size = 10;//设定每页显示的记录数
        $pager_Number = ceil($pager_Total/$pager_Size);//得到总页数,如果有小时就进一步取整
        $pager_URL = "dummyhost.php?action=View";
        
        //获得当前页的页数,从REQUEST获得
        if(isset($_GET['pager_PageID'])&& !empty($_GET['pager_PageID'])){
            $pager_PageID = intval($_GET['pager_PageID']);
        }else{
            //如果是第一次访问,则设定当前页为第一页
            $pager_PageID = 1;
        }          

        //每页的起,始记录数
        //如果当前页是第一页,则记录是从第0条记录开始的
        if ($pager_PageID == 1 ) {
            $pager_StartNum = 0;
        //如果当前页不是第一页,则记录是从当前的页数减去1乘以每页的显示记录数开始的    
        } else {
             $pager_StartNum = ($pager_PageID -1) * $pager_Size;
        }    
        //当前页的结束记录数是起始记录数加上每页的显示记录数
        $pager_EndNum = $pager_StartNum + $pager_Size;
        //如果当前页是第一页,且总页数大于1
        if ($pager_PageID == 1 && $pager_Number>1) {
            //第一页
            $pager_Links = "上一页 | <a href=".$pager_URL."&pager_PageID=".($pager_PageID+1).">下一页</a>";
        //否则如果当前页是最后一页,且总页数大于1    
        } 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('search','dummyhost_search.php');  
        include_once('dummyhost_ad.php');
         
        $smarty->assign('pager_Total',$pager_Total);        
        $smarty->assign('pager_StartNum',$pager_StartNum);
        $smarty->assign('pager_EndNum',$pager_EndNum);
        $smarty->assign('pager_Links',$pager_Links);
        $smarty->display("dummyhost.tpl");       
        include_once('footer.php'); 
?>

好了,打完收功,下一节我们将讨论如果何在模板文件中显示它。。

[ 本帖最后由 帅的不能再输啦 于 2006-5-7 16:00 编辑 ]

作者: 帅的不能再输啦   发布时间: 2006-05-07

不错不错
我来顶下楼主

作者: fengyun   发布时间: 2006-05-07

smatry......一年之内不打算学了,不过还是要呱唧呱唧

作者: fakir   发布时间: 2006-05-07

支持楼主
不过偶不会smarty,努力学习!

作者: 笨猫   发布时间: 2006-05-07

哈哈,SMARTY不是太难,一边啃手册,一边写程序,是可以快速撑握。

作者: 帅的不能再输啦   发布时间: 2006-05-07

顶下。。。

作者: seraph   发布时间: 2006-05-08

顶一下

作者: yustar   发布时间: 2006-05-08

呱唧呱唧,我会smarty 不是太熟练,学习了

作者: xiaojia   发布时间: 2006-05-08

瓜几瓜几...谢谢.. 有用..

作者: pyang2005   发布时间: 2006-05-08

呵呵,五一回来以后和大家打个招呼。

作者: liumingl   发布时间: 2006-05-08

斑竹去哪里Happy了...?

期待 帅的不能再输啦 (雪悟)  的tpl部分啊...

作者: pyang2005   发布时间: 2006-05-08

...? 数据一次全取?

作者: Phzzy   发布时间: 2006-05-08

{section name="list" loop=$array start=0 max=$pager_Total step=1}

{if ($smarty.section.list.dummyhost >= $pager_StartNum )&& ($smarty.section.list.dummyhost <= $pager_EndNum )}

<tr bgcolor="#ffffff">

<td width="40%">标题:<a href=article.php?did={$array
    .did}>{$array
      .title}</a><br>
         <a href=article.php?did={$array
        .did}>{$array
          .explan}</a></td>
          <td>{$array
            .voidbulk}</td>
            <td>{$array
              .databulk}</td>
              <td>{$array
                .place}</td>
                <td>{$array
                  .line}</td>
                  <td>{$array
                    .price}</td>
                    </tr>
                    {/if}
                    {/section}
                    </table>
                    <br>
                    <div align=right><font color="#000000">{$pager_Links}</font></div>
                    <br>

                    [ 本帖最后由 帅的不能再输啦 于 2006-5-8 13:21 编辑 ]

作者: 帅的不能再输啦   发布时间: 2006-05-08

写的不错
但常用SmartyPaginate,lz不要笑我懒啊,这可是纯面向对象的,而且功能贼强

作者: xiaoqin_007   发布时间: 2006-05-08

呱唧呱唧"(鼓掌哦)!!

作者: Per   发布时间: 2006-05-08

相当不错的东东,敬佩楼主的钻研精神,支持

作者: MySQL   发布时间: 2006-05-08

看不大懂。呵呵

作者: define_zhang   发布时间: 2006-05-08

顶一下!!!

作者: 马路守护者   发布时间: 2006-05-10

支持!  有用。。。。

作者: e_yangrz   发布时间: 2006-05-11

呱唧呱唧,学习中

作者: zlmnjy   发布时间: 2006-05-15

顶一下

作者: szy_session1987   发布时间: 2006-05-15

多谢楼主分享。
顶了

作者: DH   发布时间: 2006-05-30

个人感觉我的那个分页类更加方便些,调用的时候2-3行就搞定了,剩下的就是输出。按照类返回的属性输出就行了,smarty照样适用。我就是在smarty的环境下使用的。
(我是菜鸟,高手末砸)

作者: machine_马   发布时间: 2006-05-30

说句实话,没看明白:这个分页和smarty有什么关系?乍一看标题我还以为smarty提供象tbs那样自带的分页机制了呢……原来不是。

作者: wyg27   发布时间: 2006-06-02

顶.........

作者: asdf93945   发布时间: 2006-08-08

大家都努力写一些功能独立的摸块,发到网上,大家都可以学习学习,急用的时候也不用像热锅上的蚂蚁了。
为版主鼓掌。

作者: weidaosong   发布时间: 2006-08-08

好帖子为什么不加为精华呢!

作者: forest   发布时间: 2006-08-11

恕我直言,这个分页我觉得没有我写的好,请查看我(hobbs136)的文章,我直接用smarty模板来写分页。我的更能体现内容与表现分离的思想。

作者: hobbs136   发布时间: 2006-08-11

引用:
原帖由 hobbs136 于 2006-8-11 13:11 发表
恕我直言,这个分页我觉得没有我写的好,请查看我(hobbs136)的文章,我直接用smarty模板来写分页。我的更能体现内容与表现分离的思想。
发到这里出来看看,给大家分享。

作者: Per   发布时间: 2006-08-14

呱唧呱唧
正在学smarty:)

作者: crab68   发布时间: 2006-09-14

非常的感谢~~楼主是好人,掌声

作者: cheerfans   发布时间: 2006-09-16

先顶再看

作者: scorpion   发布时间: 2006-09-24

呱唧呱唧

作者: tingoooo   发布时间: 2006-10-20


挂瓜

作者: laopi   发布时间: 2006-10-24

光看不回,不象话,不错,支持

作者: binzi   发布时间: 2006-10-24

:lol :lol

作者: kylingood   发布时间: 2007-07-18

呱唧呱唧

作者: freshcn   发布时间: 2007-09-01

一楼的程序确实现写的很垃圾。。。
感谢粉丝们的热力追捧。。
朕谢谢您了。。。

作者: 帅的不能再输啦   发布时间: 2007-09-01