在 DedeCMS 中,栏目分页主要分为两种情况:

- 列表分页:这是最常见的情况,即一个栏目下的文章列表很多,需要分页显示,用户点击“下一页”时,URL 会变成
plus/list.php?tid=栏目ID&PageNo=2这样的形式。 - 子栏目分页:当一个栏目设置为“外部链接”并指向一个“栏目交叉”时,或者在某些特殊模板中,你可能需要对子栏目本身进行分页显示。
下面我们主要讲解最常用的 列表分页,并简要提及子栏目分页。
列表分页调取 (最常用)
这是标准的栏目文章列表分页,实现步骤非常简单,主要依赖于两个核心文件。
步骤 1: 修改列表模板文件 (list_栏目ID.htm)
在后台的“模板管理” -> “默认模板管理”中,找到你需要分页的栏目对应的列表模板文件,通常是 list_栏目ID.htm。
在这个模板文件中,你需要使用两个特定的 DedeCMS 标签:{dede:list} 和 {dede:pagelist}。

{dede:list}:用于循环输出当前页的文章列表。{dede:pagelist}:用于生成分页导航链接。
示例代码 (list_栏目ID.htm):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
</head>
<body>
<h1>{dede:field.title/}</h1>
<p>{dede:field.description function='htmlspecialchars(@me)'/}</p>
<!-- 文章列表开始 -->
{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}
<!-- 文章列表结束 -->
<!-- 分页导航开始 -->
<div class="dede_pages">
<ul class="pagelist">
{dede:pagelist listsize='5' listitem='index,pre,next,end,option'}
{/dede:list}
</ul>
</div>
<!-- 分页导航结束 -->
</body>
</html>
步骤 2: 理解标签参数
{dede:list}
pagesize='10':这是最重要的参数,它指定了每页显示的文章数量,你可以根据需要修改这个数字。
{dede:pagelist}
这个标签用于生成一个美观的分页导航栏,可以自定义其显示内容和样式。

listsize='5':设置显示的页码链接数量。listsize='5'表示在当前页码的左右两侧各显示 5 个页码(如果页码足够的话)。listitem='...':这个参数用于控制分页导航栏显示哪些部分,多个部分用英文逗号隔开。index:首页pre:上一页pageno:当前页码next:下一页end:尾页option:下拉跳转框info:分页信息,如“共 45 条记录,当前第 1/5 页”
示例:只显示上一页、下一页和页码
{dede:pagelist listitem='pre,next,pageno'}
示例:显示完整的分页导航
{dede:pagelist listitem='index,pre,pageno,next,end,option,info'}
步骤 3: 后台设置 (可选)
分页不生效或样式错乱,可能与后台设置有关。
-
检查栏目设置:
- 进入“栏目管理”,编辑你的栏目。
- 在“栏目内容设置”选项卡中,确保“列表模板”指向了正确的
list_xxx.htm文件。 - 检查“文章命名规则”是否正确,这会影响文章链接的生成。
-
检查系统参数:
- 进入“系统” -> “系统基本参数” -> “核心设置”。
- 确保“是否开启_arclist标签底层字段支持”是“是”。
- 确保“是否使用目录默认主页”等选项符合你的需求。
-
生成栏目:
修改完模板后,务必回到“栏目管理”,点击对应栏目右侧的“更新”按钮,选择“更新栏目HTML”和“更新列表页HTML”,让修改生效。
子栏目分页调取 (较少用)
这种需求相对特殊,通常用于在首页或某个特殊页面中,展示某个父栏目的所有子栏目,并对这些子栏目进行分页。
实现方法需要结合 这里我们介绍一种使用 假设场景:我们在首页 ( 示例代码 ( 更完善的实现思路: 这种方法已经超出了简单模板调用的范畴,需要一定的 PHP 开发能力,对于绝大多数用户来说,标准的 列表分页 已经完全够用。 常见问题排查: 分页不显示: 分页样式错乱: 点击下一页没反应/404: 检查服务器的 URL 重写(伪静态)规则是否正确,DedeCMS 默认的分页 URL 是动态的,如果你的网站开启了伪静态,可能需要额外的规则来支持分页链接。 希望这份详细的指南能帮助你成功调出 DedeCMS 的栏目分页!{dede:channel} 和自定义的 PHP 代码,或者使用更灵活的 {dede:sql}
{dede:sql} 的方法,因为它更灵活,能直接控制分页逻辑。index.htm) 中,要调用 ID 为 2 的栏目下的所有子栏目,每页显示 10 个。index.htm):{dede:sql sql='SELECT id,typename,typedir FROM dede_arctype WHERE reid=2 ORDER BY id LIMIT 0,10'}
<a href="[field:typedir function='str_replace("{cmspath}", "", @me)']/">[field:typename/]</a>
{/dede:sql}
<!-- 这里需要手动编写分页链接,逻辑比较复杂 -->
<!-- 假设总共有 30 个子栏目,每页 10 个,共 3 页 -->
<div class="subcat_pages">
<a href='/index.php?m=home&c=Index&a=index&subpage=1'>1</a>
<a href='/index.php?m=home&c=Index&a=index&subpage=2'>2</a>
<a href='/index.php?m=home&c=Index&a=index&subpage=3'>3</a>
</div>
index.htm):让它能够接收一个 subpage 参数。sublist.php,这个文件负责根据 tid (父栏目ID) 和 subpage (页码) 来查询子栏目并输出。{dede:include} 或 {dede:php} 标签来调用这个 sublist.php 文件。
总结与常见问题
功能
核心标签
关键参数
说明
列表分页
{dede:list}{dede:pagelist}pagesize (每页条数)listsize (显示页码数)listitem (显示项)最常用,用于栏目文章列表的分页。
子栏目分页
{dede:sql} 或自定义 PHPSQL
LIMIT 子句较少用,逻辑复杂,通常需要二次开发。
list_xxx.htm 模板中是否正确写入了 {dede:pagelist}
pagesize 的值。
{dede:pagelist} 默认输出的是无序列表 <ul> 和列表项 <li>,你需要在自己的 CSS 文件中定义 .dede_pages .pagelist 的样式来美化它。listitem='pre,next' 等简化输出,然后用自己写的 HTML 和 CSS 来控制样式。
