主题分页为什么点了没反应:pagebar 的三种写法和页码错乱

· zblog · 阅读 16
摘要

分页坏了,一般是三种情况之一。 要么页码不显示,要么显示了但点了跳到第一页,要么点第二页出来的是第一页的内容。 分别对应三个不同的问题。逐条说。 一、页码不显示 模板里没写分页标签,或者写了但变量没赋上。 Z-Blog 原生主题的

分页坏了,一般是三种情况之一。

要么页码不显示,要么显示了但点了跳到第一页,要么点第二页出来的是第一页的内容。

分别对应三个不同的问题。逐条说。

一、页码不显示

模板里没写分页标签,或者写了但变量没赋上。

Z-Blog 原生主题的写法是 {template:pagebar},它会去调主题目录下的分页模板。这个文件在默认主题里有,你从零搭主题时往往没带过来。

结果就是:循环正常,文章都出来了,底下什么都没有。

解决办法两条。要么把默认主题里那个分页模板文件复制过来,要么自己手写一段 HTML,用 $pagebar 对象里的字段拼。

手写的话,需要的通常是这几样:当前页、总页数、上一页链接、下一页链接。

二、点了永远跳第一页

这个更隐蔽。

常见原因是分页链接拼的时候丢了查询参数。比如你的分类页 URL 是带 ?cate= 的,分页链接只拼了页码,没带分类,那点第二页就是全站第二页,看起来像没动。

伪静态开着的时候尤其容易出这个。因为伪静态把参数藏进了路径,模板里手动拼链接的人往往只拼了 /page/2/,没拼分类段。

正确做法是直接用系统给的链接字段,不要自己拼。自己拼的十有八九会漏参数。

三、页码对了但内容不对

这是查询参数的问题,不是模板问题。

页码传进去了,但查询语句里没有应用它,或者 offset 算错了。

offset 的算法是 (页码 - 1) × 每页条数。少减那个 1,第一页和第二页内容就是一样的内容,只是偏移了一位。

这种错误在测试时很难发现,因为第一页看着正常。要连着点两页、对比第一篇文章标题才能看出来。

一个容易被忽略的细节

每页条数从哪来?

很多人写死在模板里,或者写在查询参数里。但站点的全局设置里也有一个「每页条数」。

两边不一致时会出现这种情况:总数算出来是 5 页,实际只能翻到 4 页,最后一页是空的。

因为算页数用的是一套参数,查询用的是另一套。

统一从配置里读,别写死。

验证的笨办法

发二十篇文章,每页设五条,然后从第一页点到最后一页,每页截个图对。

听起来很笨。但分页的 bug 只在边界上出现——第一页、最后一页、只有一页的时候。中间那些页永远是对的。

只有一页的时候最容易漏:很多模板在总页数等于 1 时仍然渲染分页条,显示一个孤零零的「1」,点了没反应。加个判断,一页就不显示。

小事。但用户会点。