zoukankan      html  css  js  c++  java
  • Smarty foreach添加论坛楼层计数(counter)

        在当初Smarty很菜的时候,用PHP写了个微型论坛,有一个需求是在楼主后面显示当前是几楼回复,如下图:

       

       我当时首先想到用  iteration(边界符为“<{}>”):

      

     <{foreach from=$res item=row name=thread}>
    
        <{if $smarty.foreach.thread.iteration-1 eq 0}>
                    楼主
              <{else}>
                  <{$smarty.foreach.thread.iteration-1}>楼</font>
               <{/if}>
    
        <{/foreach}>

             这里foreach中自带的属性iteration,是指当前foreach循环的次数,从1开始(第一个不是0,而是1)

         其实这样写有个很大的问题,因为这里的 iteration 只作用于当前这个foreach,而当你翻页,进入下一页的时候问题就来了,如图:

        

         看到了问题吗?第二页首个回复的作者成了楼主!!!

         好了,接下来就给出我自己的方法,其实就是用了  html中 的<input type="hidden">,在其中填入自增计算,在foreach开始之前assign一个变量,初始值在控制器里设置好,代码如下:

         控制器:

         计算出当前要显示的页面的 offset

    //$fenyePage->pageNow   当前页数值
    //$fenyePage->pageSize   每页显示的楼层数 (我这里设置的是3)
    //通过计算就得出每一页开始时 楼层($floor)的起始值
    $floor=($fenyePage->pageNow-1)*$fenyePage->pageSize;
        
    $smarty->assign("flr",$floor);

         TPL:

    <{assign var="floor" value=$flr}>
    
    <{foreach from=$res item=row name=thread}>
    
           <{if $floor eq 0}>
                    楼主
              <{else}>
                  <{$floor}>楼</font>
               <{/if}>
    
          <input type="hidden" value="<{$floor++}>" />
    
     <{/foreach}>

         这样一来,就没问题了,即使翻页,楼层也会接着上一页的楼层计数继续显示。

  • 相关阅读:
    android 中管理短信
    Note: log switch off, only log_main and log_events will have logs!
    Android中内容观察者的使用---- ContentObserver类详解 (转)
    Mac下eclipse安装SVN插件
    手把手教你在Eclipse中使用CVS Branch功能
    DIV+CSS命名规范-转载2
    DIV+CSS命名规范-转载1
    仓库入仓-手机条码扫描
    速卖通承认的承运商代码
    同一个仓库,供应商和分销商的库存同时存在的问题
  • 原文地址:https://www.cnblogs.com/Joynic/p/2876535.html
Copyright © 2011-2022 走看看