迅睿CMS 模板循环输出列表:分页、空数据、字段判断三件事

· 迅睿CMS · 阅读 17
摘要

列表循环是模板里写得最多、也最容易留坑的地方。功能跑起来不难,难的是分页正常、空数据不崩、字段缺失不报错。 基本循环结构 {list action="module" module="news" pagesize="10"}

  • 列表循环是模板里写得最多、也最容易留坑的地方。功能跑起来不难,难的是分页正常、空数据不崩、字段缺失不报错。

    基本循环结构

    {list action="module" module="news" pagesize="10"}
      <li><a href="{$t.url}">{$t.title}</a></li>
    {/list}

    参数里 pagesize 决定每页条数,通常和后台的列表设置对齐,不一致会出现「详情页说 10 条,实际显示 8 条」的错觉。

    分页要单独写

    循环只负责数据,分页是另一个标签,容易漏:

    {if $pages}
      <div class="pager">{$pages}

    不加判断直接输出,在只有一页的时候会渲染出一个空白容器,样式上留一道空行。

    空数据的处理

    分类下没有内容时,循环体不执行,页面就是一片空白。用户的感受是「页面坏了」。正确做法是在循环外补一个兜底:

    {if $list}
      ...循环...
    {else}
      <p class="empty">暂无内容</p>
    {/if}

    字段缺失不要硬输出

    自定义字段在某几条记录里是空的,直接输出会产生空的 <span>、<img src="">。后者在部分浏览器里会请求当前页面作为图片,日志里一堆诡异的 200。加一层判断即可。

    分页和 SEO

    翻页页面的 title 建议带上页码,canonical 指当前页。这两点做对,后续页的收录才正常,否则容易被当成重复内容合并掉。