dede datalist 分页

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

datalist 是一个非常灵活的标签,它本身不具备分页能力,但它可以完美地与 DedeCMS 的核心分页标签 pagelist 结合使用,实现强大的自定义列表分页。

dede datalist 分页
(图片来源网络,侵删)

核心原理

实现分页的关键在于两个部分:

  1. {dede:datalist}: 负责从数据库中获取指定数量的数据,并根据当前页码 (page) 返回对应的数据段,它的分页功能由底层文件 arc.listview.class.php 自动处理。
  2. {dede:pagelist}: 负责根据 datalist 获取到的总数据量,生成分页的导航链接(如:首页、上一页、1 2 3 4 5、下一页、末页)。

这两个标签必须配合使用,datalist 的查询条件需要确保能够获取到所有符合条件的记录总数,pagelist 才能正确生成分页。


实现步骤

假设我们要在一个自定义页面中,调用 "文章模型" (article) 下某个栏目 (ID=1) 的文章,并实现分页,每页显示10条。

第 1 步:准备 PHP 文件

  1. 创建模板文件: 在你的模板目录 (通常是 /templets/default/) 下创建一个 HTML 文件,my_list.html
  2. 创建 PHP 处理文件: 在网站根目录下创建一个 PHP 文件,my_list.php,这个文件负责接收页面参数,并调用模板。

my_list.php 文件内容:

dede datalist 分页
(图片来源网络,侵删)
<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.listview.class.php";
// --- 关键配置 ---
// 1. 设置模板文件路径
$tplfile = DEDETEMPLATE.'/default/my_list.html';
// 2. 设置要查询的内容条件
//    这里我们查询栏目ID为1的所有文章
//    注意:这个条件必须能筛选出所有记录,以保证分页总数正确
$query = " WHERE typeid=1 AND arcrank > -1 ";
// 3. 实例化列表类
$lv = new ListView($query,$tplfile);
// 4. 显示页面
$lv->Display();
?>

代码解释:

  • require_once "include/common.inc.php";: 引入 DedeCMS 的核心文件,获取所有全局变量和函数。
  • require_once DEDEINC."/arc.listview.class.php";: 引入分页处理的核心类文件。
  • $tplfile: 指定要使用的模板文件。
  • $query: 这是最关键的一步,这里是 datalist 的 SQL WHERE 子句,它定义了你要获取哪些数据。
    • typeid=1: 只获取栏目ID为1的文章。
    • arcrank > -1: 只获取已审核通过的文章,这是一个好习惯,避免草稿被显示出来。
    • 注意:这里不要写 LIMIT,分页的 LIMIT 会被 ListView 类自动处理。
  • new ListView($query, $tplfile): 创建一个 ListView 对象,并把查询条件和模板文件传递给它。
  • $lv->Display(): 执行查询,解析模板,并最终将HTML内容输出到浏览器。

第 2 步:编写模板文件

我们来编写 my_list.html 模板文件,这个文件的结构是固定的,datalistpagelist 的位置是固定的。

my_list.html 文件内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">我的自定义列表</title>
</head>
<body>
    <h1>文章列表</h1>
    <!-- 
      {dede:datalist} 是循环输出数据的部分
      它会被 ListView 类自动解析
    -->
    {dede:datalist}
      <div class="post-item">
        <h2><a href="[field:arcurl/]">[field:title/]</a></h2>
        <p class="meta">发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/] | 作者:[field:writer/]</p>
        <div class="summary">
          [field:description function="cn_substr(@me, 200)"/]...
        </div>
      </div>
    {/dede:datalist}
    <hr>
    <!-- 
      {dede:pagelist} 是生成分页导航的部分
      它必须放在 {dede:datalist} 的后面
    -->
    <div class="pagination">
      <ul>
        {dede:pagelist listsize="2" listitem="index,pre,next,end,pageno"}
        </ul>
    </div>
</body>
</html>

模板标签解释:

dede datalist 分页
(图片来源网络,侵删)
  • {dede:datalist} ... {/dede:datalist}:

    • 这是一个循环标签,ListView 类会自动在其中循环输出当前页的数据。
    • [field:arcurl/]: 文章的链接。
    • [field:title/]: 文章标题。
    • [field:pubdate/]: 发布时间,这里用 function 进行了格式化。
    • [field:description/]: 这里用 function 截取了200个字符。
  • {dede:pagelist}:

    • 这个标签用来生成分页链接。
    • listsize="2": 显示2个“...”省略号,当页数很多时,会显示 .5 6 [7] 8 9..20 这样的效果。
    • listitem="index,pre,next,end,pageno": 定义要显示的分页项。
      • index: 首页
      • pre: 上一页
      • next: 下一页
      • end: 末页
      • pageno: 页码,1 2 3 4
    • 你可以根据需要组合这些 listitemlistitem="pre,next,end" 只显示上一页、下一页和末页。

第 3 步:访问页面

你可以通过浏览器访问 my_list.php 这个文件了。

http://www.yourdomain.com/my_list.php

你应该能看到栏目ID为1的文章列表,并且底部有分页导航,点击页码,就可以跳转到对应的页面了。


常见问题与注意事项

  1. 分页总数不准确

    • 原因: 最常见的原因是 $query 中的查询条件过于复杂,使用了子查询或者 JOIN,导致 ListView 类无法正确获取总记录数 (TotalResult)。
    • 解决方法:
      • 确保 $query 是一个简单的 WHERE 子句。
      • 如果查询逻辑复杂,可以考虑在 my_list.php 中手动执行 COUNT(*) 查询来获取总数,然后手动赋值给 $lv->TotalResult
  2. URL 中 ?page= 的问题

    • 默认情况下,分页链接是 my_list.php?page=2 这样的形式,如果你希望美化 URL,可以结合 DedeCMS 的 "栏目目录默认页" 功能。
    • 在后台 -> 栏目管理 -> 选择你的栏目 -> 修改,找到 “栏目列表选项”,设置 “列表命名规则”,list_{page}.html
    • 你需要修改 my_list.php 中的分页逻辑,使其能解析 list_2.html 这样的URL,这通常需要重写 ListView 类的部分方法,或者使用更高级的伪静态方案,相对复杂一些。
  3. datalistarclist 的区别

    • arclist: 用于在任意页面调用固定数量的文章(如首页调用最新文章、推荐文章),它不支持分页。
    • datalist: 专门用于生成列表页,它必须配合 PHP 文件和 ListView 类才能工作,并且支持分页。
    • 简单记:需要分页的列表,用 datalist;不需要分页的少量内容,用 arclist
步骤 操作 关键点
PHP 文件 创建 my_list.php,引入核心类,实例化 ListView $query 条件要准确,能获取所有记录。
模板文件 创建 my_list.html,使用 {dede:datalist} 循环数据,{dede:pagelist} 生成分页。 datalistpagelist 的位置和写法要正确。
访问 通过浏览器访问 my_list.php URL 是 .php 文件,不是 .html 模板。

通过以上步骤,你就可以在 DedeCMS 中灵活地使用 datalist 标签实现任何你想要的列表分页效果了。

-- 展开阅读全文 --
头像
c语言提供的合法的关键字是(
« 上一篇 2025-12-27
织梦广告JS调用代码如何正确使用?
下一篇 » 2025-12-27

相关文章

取消
微信二维码
支付宝二维码

目录[+]