主题分页为什么点了没反应:pagebar 的三种写法和页码错乱
分页坏了,一般是三种情况之一。 要么页码不显示,要么显示了但点了跳到第一页,要么点第二页出来的是第一页的内容。 分别对应三个不同的问题。逐条说。 一、页码不显示 模板里没写分页标签,或者写了但变量没赋上。 Z-Blog 原生主题的
分页坏了,一般是三种情况之一。
要么页码不显示,要么显示了但点了跳到第一页,要么点第二页出来的是第一页的内容。
分别对应三个不同的问题。逐条说。
一、页码不显示
模板里没写分页标签,或者写了但变量没赋上。
Z-Blog 原生主题的写法是 {template:pagebar},它会去调主题目录下的分页模板。这个文件在默认主题里有,你从零搭主题时往往没带过来。
结果就是:循环正常,文章都出来了,底下什么都没有。
解决办法两条。要么把默认主题里那个分页模板文件复制过来,要么自己手写一段 HTML,用 $pagebar 对象里的字段拼。
手写的话,需要的通常是这几样:当前页、总页数、上一页链接、下一页链接。
二、点了永远跳第一页
这个更隐蔽。
常见原因是分页链接拼的时候丢了查询参数。比如你的分类页 URL 是带 ?cate= 的,分页链接只拼了页码,没带分类,那点第二页就是全站第二页,看起来像没动。
伪静态开着的时候尤其容易出这个。因为伪静态把参数藏进了路径,模板里手动拼链接的人往往只拼了 /page/2/,没拼分类段。
正确做法是直接用系统给的链接字段,不要自己拼。自己拼的十有八九会漏参数。
三、页码对了但内容不对
这是查询参数的问题,不是模板问题。
页码传进去了,但查询语句里没有应用它,或者 offset 算错了。
offset 的算法是 (页码 - 1) × 每页条数。少减那个 1,第一页和第二页内容就是一样的内容,只是偏移了一位。
这种错误在测试时很难发现,因为第一页看着正常。要连着点两页、对比第一篇文章标题才能看出来。
一个容易被忽略的细节
每页条数从哪来?
很多人写死在模板里,或者写在查询参数里。但站点的全局设置里也有一个「每页条数」。
两边不一致时会出现这种情况:总数算出来是 5 页,实际只能翻到 4 页,最后一页是空的。
因为算页数用的是一套参数,查询用的是另一套。
统一从配置里读,别写死。
验证的笨办法
发二十篇文章,每页设五条,然后从第一页点到最后一页,每页截个图对。
听起来很笨。但分页的 bug 只在边界上出现——第一页、最后一页、只有一页的时候。中间那些页永远是对的。
只有一页的时候最容易漏:很多模板在总页数等于 1 时仍然渲染分页条,显示一个孤零零的「1」,点了没反应。加个判断,一页就不显示。
小事。但用户会点。