核心原理

实现分页的核心在于 两个标签配合使用

dede模板标签arclist实现分页
(图片来源网络,侵删)
  1. {dede:arclist}: 负责获取当前页应该显示的文章列表,它通过 pagesize 参数控制每页显示的文章数量,并通过 limit 参数(由底层模板的 page 变量决定)来定位当前页的数据。
  2. {dede:pagelist}: 负责生成分页导航链接(如:首页、上一页、1 2 3 4 5、下一页、末页),它会根据总文章数和每页显示数,自动计算出总页数,并生成相应的URL。

实现步骤

第1步:创建模板文件

在你的模板目录(通常是 /templets/your_template/)下创建一个专门用于列表页的模板文件,list_article.htm

第2步:在模板文件中编写标签代码

打开 list_article.htm 文件,按照以下结构编写代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:global.cfg_webname/}</title>
</head>
<body>
    <h1>文章列表</h1>
    <!-- 第一步:使用 {dede:arclist} 获取当前页的文章列表 -->
    {dede:arclist 
        typeid='0' 
        titlelen='30' 
        row='10' 
        pagesize='10' 
        orderby='pubdate' 
        orderway='desc'
    }
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:arclist}
    <!-- 第二步:使用 {dede:pagelist} 生成分页导航 -->
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listitem="index,pre,page,next,end,option" listsize="5" /}
        </ul>
    </div>
</body>
</html>

第3步:关键参数详解

{dede:arclist} 关键参数

  • typeid='0': 指定要获取文章的栏目ID。
    • 0 表示获取全站所有文章。
    • 填入具体的数字(如 1)则只获取该栏目下的文章。
  • pagesize='10': 这是实现分页最核心的参数! 它定义了每页显示多少条文章,设置为 10,那么每页就会显示10篇文章。
  • row='10': 这个参数在开启了分页功能时,通常建议与 pagesize 设置成相同的值,它表示 arclist 标签一次循环输出的记录数,在分页场景下,pagesize 会自动覆盖 row 的作用,但保持一致是好的习惯。
  • limit='起始位置,显示条数': 这个参数用于手动控制分页,但在标准分页实现中,我们通常不直接使用它,DedeCMS 的底层机制会自动根据当前页码计算出 limit 值,在第2页,limit 会自动变成 10,10(假设 pagesize=10)。

{dede:pagelist} 关键参数

  • listitem='...': 定义分页导航栏显示哪些项目。
    • index: 首页
    • pre: 上一页
    • page: 页码(如 1, 2, 3...)
    • next: 下一页
    • end: 末页
    • option: 下拉跳转框
    • 你可以自由组合,listitem="pre,page,next" 只显示上一页、页码和下一页。
  • listsize='5': 定义页码显示的宽度,即当前页码左右两侧各显示多少个页码。listsize='2',当前页是第3页,就会显示 1, 2, [3], 4, 5

完整的 list_article.htm 示例

这是一个更完整、更美观的列表页模板示例,包含了CSS样式。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:global.cfg_webname/} - {dede:field.title/}</title>
    <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; margin: 20px; }
        .article-list { list-style: none; padding: 0; }
        .article-list li { border-bottom: 1px solid #eee; padding: 15px 0; }
        .article-list li a { text-decoration: none; color: #333; font-size: 16px; font-weight: bold; }
        .article-list li a:hover { color: #0066cc; }
        .article-list li .date { color: #999; font-size: 12px; float: right; }
        .dede_pages { margin-top: 30px; text-align: center; }
        .pagelist { display: inline-block; list-style: none; padding: 0; }
        .pagelist li { display: inline; margin: 0 5px; }
        .pagelist li a, .pagelist li span { display: inline-block; padding: 5px 10px; border: 1px solid #ddd; border-radius: 3px; text-decoration: none; color: #333; }
        .pagelist li a:hover { background-color: #f0f0f0; }
        .pagelist li .thisclass { background-color: #0066cc; color: #fff; border-color: #0066cc; }
    </style>
</head>
<body>
    <h1>{dede:field.title/}</h1>
    <!-- 文章列表 -->
    <ul class="article-list">
        {dede:arclist 
            typeid='0' 
            titlelen='50' 
            row='10' 
            pagesize='10' 
            orderby='pubdate' 
            orderway='desc'
        }
            <li>
                <a href="[field:arcurl/]">[field:title/]</a>
                <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
            </li>
        {/dede:arclist}
    </ul>
    <!-- 分页导航 -->
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listitem="index,pre,page,next,end,option" listsize="5" /}
        </ul>
    </div>
</body>
</html>

常见问题与注意事项

分页URL不正确或404错误

  • 原因: 这是最常见的问题,通常是因为网站开启了伪静态,但DedeCMS的后台设置没有正确配置。
  • 解决方案:
    1. 登录DedeCMS后台。
    2. 进入 “系统” -> “系统基本参数” -> “核心设置”
    3. 找到 “是否使用伪静态” 选项,选择 “是”
    4. 找到 “列表命名规则”“文章命名规则”,确保它们设置了正确的伪静态后缀,list_{page}.html
    5. 非常重要: 上传并覆盖服务器的 rewritelist.php 文件,这个文件在DedeCMS安装包的 include/ 目录下,你需要根据你的服务器环境(Apache, Nginx, IIS)来配置对应的伪静态规则,并将规则添加到你的网站配置中,Nginx的规则通常是:
      rewrite ^/list-([0-9]+)\.html$ /plus/list.php?tid=$1 last;
      rewrite ^/list-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&PageNo=$2 last;

分页不生效,只显示第一页

  • 原因: 99%的情况是因为 {dede:arclist} 标签中没有设置 pagesize 参数,DedeCMS需要这个参数来知道如何进行分页切割。
  • 解决方案: 检查你的 {dede:arclist} 标签,务必加上 pagesize='每页条数'

如何在首页实现分页?

  • 场景: 首页 (index.htm) 也想只显示10篇文章,并带分页。

    dede模板标签arclist实现分页
    (图片来源网络,侵删)
  • 方法: 首页的分页逻辑和列表页略有不同,你需要修改首页的模板文件 index.htm

    1. {dede:arclist} 标签中加入 pagesize='10'
    2. {dede:arclist} 标签后,同样加上 {dede:pagelist}
    3. 为了让分页链接指向首页,你需要给 {dede:pagelist} 添加一个 tagid 属性,并在 {dede:arclist} 中也使用相同的 tagid
      <!-- 首页 index.htm -->
      {dede:arclist typeid='0' pagesize='10' tagid='indexpage'}
      ... 循环内容 ...
      {/dede:arclist}
    {dede:pagelist tagid='indexpage' listitem="index,pre,page,next,end" /}
    ``` 这样,分页链接就会生成类似 `index_2.html`, `index_3.html` 的URL,你需要为这些URL配置伪静态规则。

实现DedeCMS {dede:arclist} 分页,记住以下三要素:

  1. 模板文件: 创建一个列表页模板(如 list_article.htm)。
  2. arclist: 务必添加 pagesize='每页条数' 参数。
  3. pagelist: 在 arclist 标签之后,添加 {dede:pagelist} 来生成分页导航。
  4. 伪静态配置: 如果使用伪静态,请确保后台设置正确并上传了 rewritelist.php,配置了服务器规则。

遵循以上步骤,你就可以成功地在DedeCMS中实现列表分页功能了。

dede模板标签arclist实现分页
(图片来源网络,侵删)