Typecho 文档:给文章归档和文章内容做分页处理

03月03日

适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/3945.html
许可方式:付费改造

注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。

敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。

文档说明

博客已十年,文章数量有 600 多篇,在使用内置方法 Widget_Contents_Post_Recent 输出文章归档时,发现不支持 pageNav() 分页输出,导致全部文章信息一次性显示,有视觉可见的明显的延迟。于是,只好又去查看 Typecho 源文件,了解到了 Typecho 对数据分页查询的处理机制。

在 Typecho 中,默认使用分页显示的有:

1. 后台,文章列表页;附件列表页;评论列表页;用户列表页。

其中,独立页列表页、分类列表页、标签页并未使用,个人理解是,前两者列表页使用了拖拽排序功能,以及标签页使用了多选删除、合并功能,这些功能在跨页时,不利于操作。

3. 前台,归档页(含:首页/分类页/搜索页/标签页/用户页)。

其中,内置的输出相关文章、文章归档功能并未使用(这也是本文档要探讨的)。


功能实现

通过查看以上各页面所涉及的文件后,发现 var\Typecho\Db\Query.phppage($page, $pageSize) 是对数据进行分页查询的关键函数,以下是个人的一些浅薄理解。

1. 假设,共有 13 条数据,其中,第 1 页 5 条,第 2 页 5 条,第 3 页 3 条。

2. 接着,Typecho 的分页查询机制,会在数据库的查询层面,使用构建的语句(如 LIMIT 5 OFFSET 5 从第 6 条数据开始,取 5 条)提取用户所浏览分页下的数据(如第 2 页的第 6~10 条,共计 5 条数据),从而避免了先获取所有 11 条数据,再在应用层面对数据分页处理,输出匹配的数据(如 JavaScript 在前端处理分页的方式)。

那么,依此机制,当涉及多条(多行)数据查询时,是能够以类似的方式实现分页输出的,比如,作者 Lopwon 对后台独立页列表页标签页做了分页改造。

那么,依此机制,同样也可以对具有多条(多行)数据查询的文章归档功能做分页输出(演示

那么,依此机制,能否对文章内容做分页输出呢?

答案,不行,因为文章内容只是单条(单行)数据内的 text 字段值。

不过,可以参考文内分割线 <!--more--> 输出文章摘要的方式,对文章内容以标识符(如 <!--singleNav-->)做分割,把不同部分的文章内容在不同页码页面中显示(演示

以上演示的文章归档和文章内容分页功能,使用 PHP 在后端对数据做分页处理,按页码取对应的数据输出,与使用 JavaScript 在前端先取出所有数据再分页处理,有本质区别,也更高效。

电邮 lopwon@qq.com 付费改造。

Snapic Plus v5 Lopwon Hub