dede会员列表分页如何实现?

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

DedeCMS 的分页机制是固定的,通过一个特定的函数 GetPageList() 来实现,我们的任务就是确保在会员列表页面,这个函数能被正确调用并传入正确的参数。

dede 会员列表分页
(图片来源网络,侵删)

核心思路

  1. 模板文件:在 memberlist.htm 模板中,使用 {dede:memberlist} 标签来循环输出会员列表,并在列表下方放置分页代码 {dede:pagelist}
  2. PHP 控制文件:修改 member_list.php 文件,让它接收并处理分页参数(如 page),然后调用 GetPageList() 函数,并将分页数据传递给模板。

详细步骤

第一步:修改会员列表模板文件 (memberlist.htm)

这个文件通常位于你的模板目录下,路径类似 /templets/default/member/memberlist.htm

  1. 定位分页代码: 打开 memberlist.htm 文件,找到你想要放置分页链接的位置,通常在会员列表循环 {dede:memberlist} 的后面。

  2. 添加或修改分页标签: 使用 DedeCMS 的内置分页标签 {dede:pagelist},这个标签会自动渲染出分页链接(首页、上一页、1, 2, 3...、下一页、末页)。

    完整的 memberlist.htm 示例结构:

    dede 会员列表分页
    (图片来源网络,侵删)
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>会员列表 - {dede:global.cfg_webname/}</title>
        <link rel="stylesheet" href="/templets/default/css/style.css">
    </head>
    <body>
        <div class="main">
            <h2>会员列表</h2>
            <!-- 会员列表循环开始 -->
            <ul class="userlist">
                {dede:memberlist}
                <li>
                    <a href="[field:spaceurl/]" target="_blank">
                        <img src="[field:face/]" alt="[field:uname/]">
                        <span>[field:uname/]</span>
                    </a>
                </li>
                {/dede:memberlist}
            </ul>
            <!-- 会员列表循环结束 -->
            <!-- 关键部分:分页代码 -->
            <div class="dede_pages">
                <ul>
                    <li><span class="pageinfo">共 <strong>{dede:pagelist listsize='0'/}</strong> 页</span></li>
                    {dede:pagelist listsize='5' listitem='index,pre,next,end,pageno'}
                </ul>
            </div>
            <!-- 分页代码结束 -->
        </div>
    </body>
    </html>

    分页标签参数说明:

    • {dede:pagelist}:核心分页标签。
    • listsize='5':显示当前页码前后各 5 个页码,当前是第 8 页,就会显示 3,4,5,6,7,[8],9,10,11,12,13
    • listitem='index,pre,next,end,pageno':定义要显示的分页项。
      • index:首页
      • pre:上一页
      • next:下一页
      • end:末页
      • pageno:页码
    • {dede:pagelist listsize='0'/}:这个用法会直接输出总页数,常用于显示“共 X 页”的信息。

第二步:修改 PHP 控制文件 (member_list.php)

这个文件是处理会员列表逻辑的核心,它负责从数据库中读取数据并传递给模板,路径通常是 /member/member_list.php

  1. 打开 member_list.php 文件

  2. 找到并修改关键代码: 在文件中,找到类似 $dlist = new MemberList(); 的代码,这行实例化了一个用于处理会员列表的类。

    dede 会员列表分页
    (图片来源网络,侵删)
  3. 添加分页逻辑: 在实例化类之后,需要设置分页参数,DedeCMS 的分页通常通过 SetParameterQuerySetSource 来实现。

    修改后的 member_list.php 关键代码示例:

    <?php
    require_once(dirname(__FILE__)."/config.php");
    require_once(DEDEINC."/datalistcp.class.php");
    // 获取当前页码,如果没有则默认为 1
    $page = isset($page) && is_numeric($page) ? $page : 1;
    // 实例化数据列表类
    $dlist = new DataListCP();
    // --- 关键修改部分 ---
    // 1. 设置每页显示多少条记录
    $dlist->pageSize = 20; // 每页显示 20 个会员
    // 2. 设置 SQL 查询语句
    //    这里可以根据你的需求修改,比如按注册时间倒序
    $query = "SELECT * FROM `dede_member` ORDER BY `joinip` DESC"; // `dede_member` 是会员主表,请根据你的表前缀修改
    // 3. 设置分页参数,将 page 参数传递给分页链接
    //    这样点击分页链接时,page 参数才会被正确传递
    $dlist->SetParameterQuery('page', $page);
    // 4. 调用获取分页数据的函数
    //    这个函数会执行查询,并获取总记录数,用于计算总页数
    $dlist->SetSource($query);
    $dlist->dsql->SetQuery($query);
    $dlist->dsql->Execute('al');
    $totalRow = $dlist->dsql->GetTotalRow('al'); // 获取总记录数
    $dlist->totalPage = ceil($totalRow / $dlist->pageSize); // 计算总页数
    $dlist->SetPage($page);
    // 绑定模板变量
    //    将分页数据传递给模板中的 {dede:pagelist} 标签
    $dlist->tpl->SetVar('pageList', $dlist->GetPageList());
    // --- 关键修改部分结束 ---
    // 调用模板
    include(DEDEMEMBER."/templets/memberlist.htm");
    ?>

    代码逻辑解释:

    • $page = isset($page) ? $page : 1;:获取 URL 传递过来的 page 参数,如果不存在则默认为第 1 页。
    • new DataListCP();:DedeCMS 专门用于处理带分页列表的类。
    • $dlist->pageSize = 20;:设置每页显示的会员数量,你可以根据需要调整。
    • $query = "SELECT * FROMdede_member:定义从数据库查询会员的 SQL 语句。dede_member 是默认的会员主表名,如果你的表前缀不是 dede_,请务必修改。
    • $dlist->SetParameterQuery('page', $page);这是非常重要的一步! 它告诉分页系统,分页链接的 URL 中需要包含 page 这个参数,并且它的值是当前页码,没有它,点击分页链接后 page 参数会丢失,导致无法跳转。
    • $dlist->SetSource($query); 和后续代码:这部分是 DataListCP 类内部用来计算总记录数和总页数的。
    • $dlist->tpl->SetVar('pageList', $dlist->GetPageList());:这是将生成分页 HTML 代码的核心步骤。$dlist->GetPageList() 会生成类似 .../member/member_list.php?page=2 这样的链接,然后通过 SetVar 将其赋值给模板中的 {dede:pagelist}

第三步:清空缓存并测试

  1. 清空系统缓存: 登录你的 DedeCMS 后台,进入【系统】->【系统基本参数】->【性能选项】,点击“清空所有缓存”。

  2. 访问会员列表页面: 访问你的会员列表页面,http://你的域名/member/http://你的域名/member/index.php?uid=-1 (具体路径看你网站设置)。

    你现在应该能看到:

    • 会员列表按照你设定的数量(如 20 个)显示。
    • 在列表下方,会出现分页导航栏。
    • 点击“下一页”、“2”、“3”等链接,页面会正确跳转到对应页,URL 中的 page 参数会相应改变。

常见问题与解决方法

  • 问题1:分页链接不生效,点击后还是第一页。

    • 原因:最常见的原因是 member_list.php 中缺少 $dlist->SetParameterQuery('page', $page); 这行代码,导致分页参数无法传递。
    • 解决:检查并添加这行代码。
  • 问题2:{dede:pagelist} 标签没有输出任何内容。

    • 原因:PHP 文件中没有正确调用 $dlist->GetPageList() 并将其传递给模板。
    • 解决:确保 member_list.php 中有 $dlist->tpl->SetVar('pageList', $dlist->GetPageList()); 这行代码。
  • 问题3:样式错乱。

    • 原因:分页链接的 HTML 结构没有被你的 CSS 样式正确渲染。
    • 解决:检查 memberlist.htm{dede:pagelist} 外层的 divul 的 class 名称,并在你的 CSS 文件中添加对应的样式。
      .dede_pages ul {
          list-style: none;
          display: flex;
          gap: 5px;
      }
      .dede_pages a, .dede_pages span {
          padding: 5px 10px;
          border: 1px solid #ccc;
          text-decoration: none;
      }
      .dede_pages .thisclass {
          background-color: #007bff;
          color: white;
          border-color: #007bff;
      }

通过以上步骤,你就可以成功地为 DedeCMS 的会员列表添加功能完善的分页了。

-- 展开阅读全文 --
头像
何钦铭C语言程序设计答案在哪里找?
« 上一篇 今天
dede模板如何运行php代码?
下一篇 » 今天

相关文章

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