Smarty模板分页开发求助:如何基于总页数数字实现循环遍历
在Smarty模板中实现分页导航的正确方式
核心问题修正
你用{foreach}遍历数字变量$numberOfPage的方式是错误的——{foreach}仅支持遍历数组或可迭代集合,而Smarty专门提供了{for}循环来处理数字范围的遍历,刚好满足你从1到总页数循环的需求。
修正后的完整代码
<ol class=""> <!-- 上一页按钮:仅当前页不是第一页时显示 --> {if $currentPage > 1} <li> <a href="?page={$currentPage-1}" class=""> <span class="icon-chevron-left"></span> Préc. </a> </li> {/if} <!-- 遍历生成所有页码 --> {for $page=1 to $numberOfPage} <li class="{if $page == $currentPage}active{/if}"> <a href="?page={$page}" class="">{$page}</a> </li> {/for} <!-- 下一页按钮:仅当前页不是最后一页时显示 --> {if $currentPage < $numberOfPage} <li> <a href="?page={$currentPage+1}" class=""> Suiv. <span class="icon-chevron-right"></span> </a> </li> {/if} </ol>
关键细节说明
{for $page=1 to $numberOfPage}:这行代码实现从1到总页数$numberOfPage的循环,每次循环$page会依次取1、2…直到总页数。$currentPage变量:需要你在后台传入当前页码(比如从URL参数?page=xxx获取后赋值),用来标记当前选中的页码,以及判断上/下一页按钮的显示时机。- 激活状态标记:通过
{if $page == $currentPage}active{/if}给当前页码的<li>添加样式类,方便前端区分选中状态。 - 链接修正:把原代码中的
#替换成实际分页链接(示例为?page={$page}),确保点击页码能跳转到对应页面。
原代码问题补充
原代码用{foreach}遍历数字会直接触发Smarty语法错误,且逻辑上会给每个页码都重复渲染上/下页按钮,不符合常规分页的展示逻辑。修正后的代码将上/下页按钮独立出来,仅在合适时机显示一次,同时用{for}循环生成所有页码。
内容的提问来源于stack exchange,提问作者Kimako
相关产品推荐
相关产品推荐

