You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:50:21