- 如何获取当前列表页的总页数(在模板中调用)。
- 如何控制列表页总共显示多少页(在后台设置)。
如何获取当前列表页的总页数(模板调用)
在DedeCMS的列表页模板文件(通常是 /templets/default/list_*.htm)中,你可以使用一个专门的内置标签来获取总页数。

核心标签:{dede:pagelist listsize='0' listitem='pageno'}
这个标签本身是用来生成“上一页/下一页”等导航链接的,但它有一个非常重要的属性 listitem,当设置为 pageno 时,它会在导航链接的旁边显示出“共 X 页”这样的字样。
使用方法:
在你的列表页模板中,找到你希望显示总页数的位置(通常是分页导航的旁边),插入以下代码:
{dede:pagelist listsize='0' listitem='pageno'}
代码解释:

{dede:pagelist}: 这是DedeCMS的分页标签。listsize='0': 这个参数控制页码导航显示的数量。'0'表示不显示中间的页码数字(如1 ... 5 6 7 ... 20),只显示上一页、下一页、首页、末页以及我们需要的总页数信息,如果你想显示页码数字,可以设置一个大于0的值,listsize='5'。listitem='pageno': 这是关键参数,它指定要显示的分页项目。'pageno'就是专门用来显示“共 X 页”信息的。
示例效果:
插入上述代码后,在页面上你可能会看到类似这样的效果:
« 上一页 下一页 » 共 5 页
这样,你就清晰地知道了这个列表页一共有多少页。
如何控制列表页总共显示多少页(后台设置)
总页数是由两个因素决定的:

- 总文章数:这个栏目下有多少篇符合条件(已审核、未过期等)的文章。
- 每页显示的文章数:你设置的每页显示多少条信息。
公式:总页数 = ceil(总文章数 / 每页显示文章数)
ceil 是向上取整函数,10 / 5 = 2 页,11 / 5 = 2.2,向上取整就是 3 页。
要控制总页数,最直接的方法就是修改“每页显示文章数”。
操作步骤:
-
登录DedeCMS后台。
-
进入【核心】 -> 【频道管理】。
-
找到你想要设置的栏目,点击后面的【修改】按钮。
-
在栏目修改页面,向下滚动到【列表选项】设置区域。
-
找到 “列表每页显示记录数” 这个选项,默认值通常是
30或40。 -
根据你的需求修改这个数值。
- 增大这个值:每页显示的文章变多,总页数就会减少。
- 减小这个值:每页显示的文章变少,总页数就会增加。
-
修改完成后,点击【确定】或【保存】按钮。
重要提示:
- 更新列表页:修改了每页显示数量后,你需要去【生成】 -> 【更新栏目HTML】 或 【更新列表页HTML】,让新的设置生效,否则,页面上显示的还是旧的分页效果。
- SEO考虑:总页数不宜过多或过少。
- 如果一个栏目有几千篇文章,每页只显示1篇,就会生成几千个列表页,这不利于SEO,且会占用大量服务器空间。
- 反之,如果每页显示几百篇,用户需要翻很多页才能找到旧文章,体验也不好。
- 通常建议将每页数量设置在
20到50之间是比较合理的。
高级应用:在PHP代码中获取总页数
如果你想在自定义的PHP文件或模型中获取总页数,而不是仅仅在模板中显示,可以通过以下方式获取。
在自定义PHP文件中
DedeCMS提供了一个分页类 Page,你可以手动计算总页数并实例化这个类来生成分页链接。
<?php
require_once(dirname(__FILE__)."/include/config_base.php");
require_once(DEDEINC.'/arc.listview.class.php');
// 1. 获取总记录数
// 这里以获取当前栏目的文章数为例
$typeid = isset($typeid) ? intval($typeid) : 0;
$row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__arctype` WHERE id = $typeid");
if(is_array($row)) {
$totalRecord = $row['dd'];
} else {
$totalRecord = 0;
}
// 2. 设置每页显示数
$listLen = 20; // 每页显示20条
// 3. 计算总页数
$totalPage = ceil($totalRecord / $listLen);
echo "通过PHP计算出的总页数是: " . $totalPage;
// 如果你需要生成分页条,可以继续使用Page类
$pageno = isset($pageno) ? intval($pageno) : 1;
if($pageno < 1) $pageno = 1;
if($pageno > $totalPage) $pageno = $totalPage;
$mainlist = new ListView($typeid, $pageno, $listLen);
// ... 后续逻辑
?>
在列表页模板中(不推荐,但可行)
在模板中,$this 对象代表了当前列表页的实例,你可以通过 $this 来获取总页数。
{dede:php}
// $this 是当前列表页的实例
$totalPage = $this->TotalPage;
echo "在模板中通过PHP获取的总页数是: " . $totalPage;
{/dede:php}
注意: {dede:php} 标签会开启PHP执行,有一定的安全风险,请确保你的网站环境安全,并且只信任你自己输入的代码,在模板中显示总页数,强烈推荐使用第一种 {dede:pagelist listitem='pageno'} 的方法。
| 需求 | 解决方案 | 位置 |
|---|---|---|
| 在页面上显示总页数 | 使用 {dede:pagelist listsize='0' listitem='pageno'} |
列表页模板 (list_*.htm) |
| 控制总页数的多少 | 修改后台【栏目】->【修改】->【列表每页显示记录数】 | DedeCMS后台 |
| 在PHP代码中获取总页数 | 使用 ceil(总记录数 / 每页显示数) |
自定义PHP文件或模型 |
希望这个详细的解释能帮助你完全理解DedeCMS列表页页数的生成和控制!
