DedeCMS 的分页功能非常成熟,主要分为两种场景:

(图片来源网络,侵删)
- 栏目列表页分页:这是最常见的情况,比如在首页、资讯列表页、产品列表页等,当文章数量超过每页显示的数量时,自动生成分页导航。
- 自定义列表/搜索结果页分页:在自定义的列表页面(如
plus/list.php)或搜索结果页面中,通过特定参数实现分页。
下面我们分别对这两种情况进行详细说明。
栏目列表页分页 (最常用)
这是系统默认就支持的功能,你只需要确保模板标签使用正确即可。
模板标签 ({dede:list})
在栏目列表页的模板文件中(通常是 templets/default/list_栏目ID.htm),你需要使用 {dede:list} 标签来循环输出文章列表。
基本用法:

(图片来源网络,侵删)
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:list}
标签解析:
{dede:list}: 开始一个文章列表循环。pagesize='10': 这是控制每页显示多少篇文章的关键参数,你可以根据需要修改这个数字,pagesize='20'。[field:arcurl/]: 文章的链接地址。[field:title/]: 文章的标题。[field:pubdate/]:文章的发布时间,这里用function进行了格式化。{/dede:list}: 循环结束。
分页导航标签 ({dede:pagelist})
在 {dede:list} 循环结束后,你需要添加分页导航标签,让用户可以点击翻页。
基本用法:
<!-- 文章列表循环 -->
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
<!-- 分页导航 -->
<div class="dede_pages">
<ul class="pagelist">
{dede:pagelist listsize='4' listitem='index,pre,pageno,next,end,option'}
{/dede:pagelist}
</ul>
</div>
标签解析:

(图片来源网络,侵删)
{dede:pagelist}: 调用分页导航。listsize='4': 显示页码的数量,当前在第5页,listsize='4'可能会显示3,4,5,6,7这样的页码范围。listitem='...': 定义分页导航栏里显示哪些元素,你可以通过组合这些元素来自定义分页栏的样式。index: 首页pre: 上一页pageno: 页码next: 下一页end: 末页option: 下拉跳转框info: 页面信息 (如:共X页/X条)
后台设置
除了模板标签,你还需要在后台进行一些基本设置:
- 进入后台:
系统->系统基本参数。 - 找到分页设置:在左侧菜单找到
核心设置。 - 修改关键参数:
列表每页显示条数: 这里是全局默认的每页显示数量,如果你在模板中没有用pagesize指定,就会使用这里的值,建议根据你的网站布局设置一个合理的默认值(如10或20)。动态页尾后缀: 这里设置的是动态分页的文件后缀,通常是.php。
自定义列表页分页
你可能需要一个不依附于任何固定栏目的列表页面,比如一个“热门文章”列表,或者一个带有特定筛选条件的列表,这时你需要使用 plus/list.php 文件。
创建自定义模板文件
在 templets/你的模板目录/ 下创建一个新的模板文件,hot_articles.htm。
hot_articles.htm 模板内容:
{dede:sql sql="SELECT * FROM `dede_archives` WHERE arcrank > -1 ORDER BY click DESC"}
{dede:list pagesize='15'}
<li><a href="[field:arcurl/]">[field:title/]</a> - 点击: [field:click/]</li>
{/dede:list}
<div class="dede_pages">
<ul class="pagelist">
{dede:pagelist listsize='4' listitem='index,pre,pageno,next,end,option'}
{/dede:pagelist}
</ul>
</div>
{/dede:sql}
与场景一的区别:
- 这里我们使用了
{dede:sql}标签来直接执行SQL查询,获取你想要的数据。 - 在
{dede:sql}标签内部,我们依然可以使用{dede:list}和{dede:pagelist}来进行列表输出和分页。
创建访问文件
在你的网站根目录(与 index.php 同级)创建一个PHP文件,hot.php。
hot.php 文件内容:
<?php require_once(dirname(__FILE__)."/include/common.inc.php"); require_once(DEDEINC."/arc.listview.class.php"); // 实例化一个列表对象 $lv = new ListView(); // 1. 设置模板的路径和文件名 $lv->SetTemplate($cfg_basedir . $cfg_templets_dir . "/hot_articles.htm"); // 2. 设置SQL查询语句 // 注意:这里的SQL必须包含一个名为 `id` 的字段,因为分页类需要它来计算总数 // SQL末尾必须加上 `limit $startrow, $rownum` $lv->sourceSql = "SELECT * FROM `dede_archives` WHERE arcrank > -1 ORDER BY click DESC"; // 3. 执行解析和显示 $lv->Display(); ?>
代码解析:
require_once(...common.inc.php): 引入DedeCMS的核心文件。new ListView(): 创建一个列表视图对象,这个类专门用来处理分页列表。$lv->SetTemplate(...): 指定要使用的模板文件路径。$lv->sourceSql = "...": 这是最关键的一步,设置你的数据查询SQL。- 重要:SQL查询的字段列表中,必须包含一个名为
id的主键或唯一标识字段,否则分页会出错。 - 你不需要在SQL中写
LIMIT子句,ListView类会自动处理。
- 重要:SQL查询的字段列表中,必须包含一个名为
$lv->Display(): 执行查询,解析模板,并最终输出HTML页面。
你通过访问 http://你的网站域名/hot.php 就能看到这个自定义的热门文章列表,并且它支持分页功能。
总结与常见问题
| 功能点 | 实现方式 | 关键点 |
|---|---|---|
| 栏目列表分页 | 在 list_栏目ID.htm 模板中使用 {dede:list} 和 {dede:pagelist} |
pagesize 控制每页数量;listitem 控制分页元素。 |
| 自定义列表分页 | 创建新模板和 .php 访问文件,使用 ListView 类 |
SQL必须包含 id 字段;ListView 类负责处理分页逻辑。 |
常见问题排查:
-
分页不显示,只有一页?
- 检查后台
系统基本参数->核心设置里的列表每页显示条数是否大于0。 - 检查你的数据总数是否真的超过了
每页显示条数。 - 对于自定义列表,检查你的SQL查询是否返回了足够多的数据。
- 检查后台
-
分页链接是动态的,我想用静态的?
- DedeCMS 默认生成动态分页(
list_1_1.php),要生成静态HTML,你需要使用“HTML静态化”功能。 - 在后台生成栏目或自定义列表页面时,选择“生成HTML”,系统会为每一页都生成一个静态文件(如
list_index.html,list_2.html等)。
- DedeCMS 默认生成动态分页(
-
分页样式很丑,想自己改?
- 分页的HTML结构由
{dede:pagelist}生成,CSS样式在/templets/default/style/dedecms.css文件中(或你当前模板的CSS文件里)。 - 你可以复制
{dede:pagelist}生成的HTML结构,然后用你自己的CSS类去覆盖和美化它,或者直接修改默认的CSS文件。
- 分页的HTML结构由
希望这份详细的指南能帮助你完全掌握 DedeCMS 的文章列表分页功能!
