迅睿CMS 模板循环输出列表:分页、空数据、字段判断三件事
摘要
列表循环是模板里写得最多、也最容易留坑的地方。功能跑起来不难,难的是分页正常、空数据不崩、字段缺失不报错。 基本循环结构 {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 指当前页。这两点做对,后续页的收录才正常,否则容易被当成重复内容合并掉。