使用 {dede:pagelist}
这是 DedeCMS 官方提供的、用于生成分页链接的专用标签,应该始终是你的首选。
(图片来源网络,侵删)
标准用法(在列表页模板 list_*.htm 中)
在 DedeCMS 的列表页模板文件(list_article.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}
<!-- 分页代码开始 -->
<div class="dede_pages">
<ul class="pagelist">
<li><span class="pageinfo">共 <strong>{dede:field.totalpage/}</strong> 页 / <strong>{dede:field.totalnum/}</strong> 条记录</span></li>
<!-- 上一页 -->
<li><a href="{dede:pagelist listitem='pre' runphp='yes'}">if(@me=='') @me=''; else @me='上一页';{/dede:pagelist}</a></li>
<!-- 页码 -->
{dede:pagelist listsize='5' listitem='index pre pageno next end'/}
<!-- 下一页 -->
<li><a href="{dede:pagelist listitem='next' runphp='yes'}">if(@me=='') @me=''; else @me='下一页';{/dede:pagelist}</a></li>
<!-- 首页 -->
<li><a href="{dede:global.cfg_cmsurl/}/">首页</a></li>
<!-- 末页 -->
<li><a href="{dede:pagelist listitem='end'/}">末页</a></li>
</ul>
</div>
<!-- 分页代码结束 -->
{dede:pagelist} 标签属性详解
{dede:pagelist} 标签非常灵活,通过不同的属性可以控制分页的样式和内容。
listitem - 定义要显示的分页项
这个属性最重要,它决定了分页条里显示哪些内容,你可以用空格或逗号隔开多个项。
index: 首页
pre: 上一页
pageno: 页码
next: 下一页
end: 末页
option: 下拉跳转选择框
info: 显示分页信息(如“共X页,X条记录”)
示例:
{dede:pagelist listitem='index pre pageno next end'} 只会显示首页、上一页、页码、下一页、末页。
{dede:pagelist listitem='info option'} 只会显示分页信息和下拉跳转框。
(图片来源网络,侵删)
listsize - 显示的页码数量
这个属性控制“页码”部分前后显示的页码总数。listsize='5' 表示当前页码的前后各显示5个页码,如果总页数足够的话。
示例:
{dede:pagelist listsize='3'}
runphp - PHP 逻辑判断
这个属性非常有用,特别是用来处理“上一页”和“下一页”在首页或末页时不应显示的问题。
-
上一页优化:
(图片来源网络,侵删)
{dede:pagelist listitem='pre' runphp='yes'}
// 如果上一页的链接为空(即在首页),则不显示“上一页”文字
if(@me=='') @me=''; else @me='上一页';
{/dede:pagelist}
这段代码会检查 @me(即上一页的URL)是否为空,如果为空,说明已经在第一页,就不显示“上一页”这个链接。
-
下一页优化:
{dede:pagelist listitem='next' runphp='yes'}
// 如果下一页的链接为空(即在末页),则不显示“下一页”文字
if(@me=='') @me=''; else @me='下一页';
{/dede:pagelist}
获取分页信息(使用 {dede:field})
分页的一些宏观信息,如总页数、总记录数,需要通过 {dede:field} 标签来获取。
{dede:field.totalpage/}: 当前栏目文章总页数。
{dede:field.totalnum/}: 当前栏目文章总数量。
{dede:field.pagecount/}: 当前页码。
{dede:field.keyword/}: 搜索关键词(如果列表是搜索结果页)。
常见问题与解决方案
问题1:分页样式不生效,显示的是原始HTML代码?
原因: 这通常是因为你的模板文件里没有引入 DedeCMS 的核心样式文件 style/dedecms.css。
解决方法:
在你的列表页模板(list_*.htm)的 <head> 部分加入以下代码:
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style/dedecms.css" type="text/css" media="screen" />
确保 style/dedecms.css 文件存在于你当前模板目录下,如果你不使用默认样式,可以自定义 CSS 类名,然后在你的 CSS 文件中编写样式。
问题2:如何自定义分页的样式?
默认的 dedecms.css 中定义了 .pagelist 相关的样式,你可以通过以下两种方式自定义:
直接修改 dedecms.css
找到 .pagelist, .pagelist li, .pagelist a 等选择器,修改它们的 display, float, margin, padding 等属性来调整布局和外观。
在模板中使用自定义类名(推荐)
给分页 div 添加一个自定义的 class,my-pagination。
<div class="my-pagination">
<ul class="pagelist">
{dede:pagelist listitem='index pre pageno next end'/}
</ul>
</div>
然后在你模板的 CSS 文件中(css/style.css)覆盖或新增样式:
.my-pagination .pagelist {
display: flex; /* 使用 Flexbox 布局 */
justify-content: center;
list-style: none;
padding: 0;
}
.my-pagination .pagelist li {
margin: 0 5px;
}
.my-pagination .pagelist a,
.my-pagination .pagelist span {
display: block;
padding: 5px 10px;
border: 1px solid #ddd;
border-radius: 3px;
text-decoration: none;
color: #333;
}
.my-pagination .pagelist a:hover {
background-color: #f0f0f0;
}
.my-pagination .pagelist .thisclass { /* 当前页的样式 */
background-color: #007bff;
color: #fff;
border-color: #007bff;
}
问题3:如何实现“首页”和“末页”的文本自定义?
{dede:pagelist listitem='index'} 默认会生成 <a href="首页URL">首页</a>,如果你想修改“首页”这个文字,可以使用 runphp 属性:
<li><a href="{dede:pagelist listitem='index'/}">返回首页</a></li>
或者更灵活的 runphp 方式(虽然这里没必要,但原理一致):
<li><a href="{dede:pagelist listitem='index' runphp='yes'}">@me='返回首页';{/dede:pagelist}</a></li>
- 核心标签:使用
{dede:pagelist} 在 {dede:list} 之后调用分页。
- 关键属性:
listitem: 控制显示哪些分页元素(首页、上页、页码、下页、末页等)。
listsize: 控制页码显示的数量。
runphp: 用于处理“上一页/下一页”在边界情况下的显示逻辑。
- 信息获取:使用
{dede:field.totalpage/} 等获取总页数等信息。
- 样式美化:通过引入
dedecms.css 或自定义 CSS 类来美化分页条。
掌握了以上方法,你就可以在 DedeCMS 中自如地实现各种样式的列表分页了。
这是 DedeCMS 官方提供的、用于生成分页链接的专用标签,应该始终是你的首选。

标准用法(在列表页模板 list_*.htm 中)
在 DedeCMS 的列表页模板文件(list_article.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}
<!-- 分页代码开始 -->
<div class="dede_pages">
<ul class="pagelist">
<li><span class="pageinfo">共 <strong>{dede:field.totalpage/}</strong> 页 / <strong>{dede:field.totalnum/}</strong> 条记录</span></li>
<!-- 上一页 -->
<li><a href="{dede:pagelist listitem='pre' runphp='yes'}">if(@me=='') @me=''; else @me='上一页';{/dede:pagelist}</a></li>
<!-- 页码 -->
{dede:pagelist listsize='5' listitem='index pre pageno next end'/}
<!-- 下一页 -->
<li><a href="{dede:pagelist listitem='next' runphp='yes'}">if(@me=='') @me=''; else @me='下一页';{/dede:pagelist}</a></li>
<!-- 首页 -->
<li><a href="{dede:global.cfg_cmsurl/}/">首页</a></li>
<!-- 末页 -->
<li><a href="{dede:pagelist listitem='end'/}">末页</a></li>
</ul>
</div>
<!-- 分页代码结束 -->
{dede:pagelist} 标签属性详解
{dede:pagelist} 标签非常灵活,通过不同的属性可以控制分页的样式和内容。
listitem - 定义要显示的分页项
这个属性最重要,它决定了分页条里显示哪些内容,你可以用空格或逗号隔开多个项。
index: 首页pre: 上一页pageno: 页码next: 下一页end: 末页option: 下拉跳转选择框info: 显示分页信息(如“共X页,X条记录”)
示例:
{dede:pagelist listitem='index pre pageno next end'} 只会显示首页、上一页、页码、下一页、末页。
{dede:pagelist listitem='info option'} 只会显示分页信息和下拉跳转框。

listsize - 显示的页码数量
这个属性控制“页码”部分前后显示的页码总数。listsize='5' 表示当前页码的前后各显示5个页码,如果总页数足够的话。
示例:
{dede:pagelist listsize='3'}
runphp - PHP 逻辑判断
这个属性非常有用,特别是用来处理“上一页”和“下一页”在首页或末页时不应显示的问题。
-
上一页优化:
(图片来源网络,侵删){dede:pagelist listitem='pre' runphp='yes'} // 如果上一页的链接为空(即在首页),则不显示“上一页”文字 if(@me=='') @me=''; else @me='上一页'; {/dede:pagelist}这段代码会检查
@me(即上一页的URL)是否为空,如果为空,说明已经在第一页,就不显示“上一页”这个链接。 -
下一页优化:
{dede:pagelist listitem='next' runphp='yes'} // 如果下一页的链接为空(即在末页),则不显示“下一页”文字 if(@me=='') @me=''; else @me='下一页'; {/dede:pagelist}
获取分页信息(使用 {dede:field})
分页的一些宏观信息,如总页数、总记录数,需要通过 {dede:field} 标签来获取。
{dede:field.totalpage/}: 当前栏目文章总页数。{dede:field.totalnum/}: 当前栏目文章总数量。{dede:field.pagecount/}: 当前页码。{dede:field.keyword/}: 搜索关键词(如果列表是搜索结果页)。
常见问题与解决方案
问题1:分页样式不生效,显示的是原始HTML代码?
原因: 这通常是因为你的模板文件里没有引入 DedeCMS 的核心样式文件 style/dedecms.css。
解决方法:
在你的列表页模板(list_*.htm)的 <head> 部分加入以下代码:
<link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style/dedecms.css" type="text/css" media="screen" />
确保 style/dedecms.css 文件存在于你当前模板目录下,如果你不使用默认样式,可以自定义 CSS 类名,然后在你的 CSS 文件中编写样式。
问题2:如何自定义分页的样式?
默认的 dedecms.css 中定义了 .pagelist 相关的样式,你可以通过以下两种方式自定义:
直接修改 dedecms.css
找到 .pagelist, .pagelist li, .pagelist a 等选择器,修改它们的 display, float, margin, padding 等属性来调整布局和外观。
在模板中使用自定义类名(推荐)
给分页 div 添加一个自定义的 class,my-pagination。
<div class="my-pagination">
<ul class="pagelist">
{dede:pagelist listitem='index pre pageno next end'/}
</ul>
</div>
然后在你模板的 CSS 文件中(css/style.css)覆盖或新增样式:
.my-pagination .pagelist {
display: flex; /* 使用 Flexbox 布局 */
justify-content: center;
list-style: none;
padding: 0;
}
.my-pagination .pagelist li {
margin: 0 5px;
}
.my-pagination .pagelist a,
.my-pagination .pagelist span {
display: block;
padding: 5px 10px;
border: 1px solid #ddd;
border-radius: 3px;
text-decoration: none;
color: #333;
}
.my-pagination .pagelist a:hover {
background-color: #f0f0f0;
}
.my-pagination .pagelist .thisclass { /* 当前页的样式 */
background-color: #007bff;
color: #fff;
border-color: #007bff;
}
问题3:如何实现“首页”和“末页”的文本自定义?
{dede:pagelist listitem='index'} 默认会生成 <a href="首页URL">首页</a>,如果你想修改“首页”这个文字,可以使用 runphp 属性:
<li><a href="{dede:pagelist listitem='index'/}">返回首页</a></li>
或者更灵活的 runphp 方式(虽然这里没必要,但原理一致):
<li><a href="{dede:pagelist listitem='index' runphp='yes'}">@me='返回首页';{/dede:pagelist}</a></li>
- 核心标签:使用
{dede:pagelist}在{dede:list}之后调用分页。 - 关键属性:
listitem: 控制显示哪些分页元素(首页、上页、页码、下页、末页等)。listsize: 控制页码显示的数量。runphp: 用于处理“上一页/下一页”在边界情况下的显示逻辑。
- 信息获取:使用
{dede:field.totalpage/}等获取总页数等信息。 - 样式美化:通过引入
dedecms.css或自定义 CSS 类来美化分页条。
掌握了以上方法,你就可以在 DedeCMS 中自如地实现各种样式的列表分页了。
