dede如何调用会员模型?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文
  1. 获取会员信息:通过 GetOneMemberGetMemberList 等函数获取会员的基本数据和自定义模型数据。
  2. 调用并显示模型字段:使用 GetFieldValue 函数从获取到的会员数据中,读取并显示你在后台为会员模型添加的自定义字段。

下面我将通过详细的步骤和代码示例,为你讲解如何实现。


第一步:理解会员模型的结构

在 DedeCMS 中,会员信息存储在两个主要地方:

  1. dede_member:存储会员的基本信息,如用户名 (userid)、密码 (pwd)、邮箱 (email)、积分 (scores) 等。
  2. dede_member_modeldede_mtype:定义了会员模型的“结构”,即有哪些自定义字段。
  3. dede_member_model_field:定义了具体的字段,如字段名、字段类型(文本、多行文本、单选、多选等)、是否必填等。
  4. dede_member_tpldede_member_full:存储会员的完整信息,包括你在自定义模型中填写的所有数据。dede_member_full 表中的字段名与 dede_member_model_field 表中的 field 字段名一一对应。

关键点:要调用自定义字段,你必须去 dede_member_model_field 表里找到你想要的字段的 field 名称(my_shengao, my_xingqu 等)。


第二步:调用单个会员的自定义模型字段

这是最常用的情况,比如在会员个人主页、文章作者信息栏等场景。

场景示例:在文章页显示作者的“个人简介”和“所在城市”

假设你在会员模型中添加了两个字段:

  • 字段名:jianjie (字段别名:个人简介)
  • 字段名:suozaidicheng (字段别名:所在城市)

实现代码:

{dede:arclist row='1' titlelen='50'}
    <!-- 1. 获取当前文章的作者ID -->
    {dede:field.userid/}
    <!-- 2. 使用PHP代码块获取会员信息并调用自定义字段 -->
    [field:php]
        // 获取当前文章的作者ID
        $member_id = $fields['userid'];
        // 如果存在作者ID
        if($member_id) {
            // 引入会员操作类文件(如果未在全局引入)
            // require_once(DEDEINC.'/membermodel.cls.php');
            // 实例化会员模型类
            $member = new MemberHandler();
            // 根据会员ID获取会员的完整信息(包括自定义模型数据)
            $member_info = $member->GetOneMember($member_id);
            // 检查是否成功获取到信息
            if(is_array($member_info)) {
                // 调用并显示自定义字段 'jianjie' (个人简介)
                // 使用 @ 符号可以避免字段为空时产生警告
                $jianjie = $member->GetFieldValue($member_info, 'jianjie');
                if($jianjie) {
                    echo "<p>个人简介:{$jianjie}</p>";
                }
                // 调用并显示自定义字段 'suozaidicheng' (所在城市)
                $city = $member->GetFieldValue($member_info, 'suozaidicheng');
                if($city) {
                    echo "<p>所在城市:{$city}</p>";
                }
            }
        }
    [/field:php]
{/dede:arclist}

代码解析:

  1. {dede:arclist ...}:我们通过 arclist 标签来获取文章信息,并利用它的 {dede:field.userid/} 来得到作者的会员ID。
  2. [field:php]...[/field:php]:这是 DedeCMS 的 PHP 代码块,我们在这里编写核心逻辑。
  3. $member = new MemberHandler();:创建一个 MemberHandler 对象,这是处理会员数据的专用类。
  4. $member_info = $member->GetOneMember($member_id);:调用 GetOneMember 方法,传入会员ID,获取该会员的所有信息,包括基本资料和你在后台自定义模型里填写的所有数据,这个信息被存储在 $member_info 这个数组里。
  5. $member->GetFieldValue($member_info, 'jianjie');:这是最关键的一步,它从 $member_info 数组中,根据你指定的字段名(这里是 'jianjie')提取出对应的值。
  6. if($jianjie):做一个简单的判断,如果字段不为空,才进行输出,避免显示空白。

第三步:调用会员列表及其自定义字段

如果你想在一个页面上列出多个会员,并显示他们的部分自定义信息,可以使用 GetMemberList 函数。

场景示例:显示所有注册会员的列表,包含“昵称”和“个人简介”

实现代码:

{dede:php}
    // 引入会员操作类文件(如果未在全局引入)
    // require_once(DEDEINC.'/membermodel.cls.php');
    // 实例化会员模型类
    $member = new MemberHandler();
    // 获取会员列表
    // 参数1: 每页显示数量
    // 参数2: 当前页码 (从1开始)
    // 参数3: 排序方式 (如 'regdate DESC' 按注册时间倒序)
    $member_list = $member->GetMemberList(10, 1, 'scores DESC');
    // 检查是否获取到列表
    if(is_array($member_list)) {
        foreach($member_list as $m_info) {
            // 调用并显示昵称 (基本字段,可以直接从数组获取)
            $nickname = $m_info['uname'];
            echo "<h3>{$nickname}</h3>";
            // 调用并显示自定义字段 'jianjie'
            $jianjie = $member->GetFieldValue($m_info, 'jianjie');
            if($jianjie) {
                echo "<p>简介:{$jianjie}</p>";
            }
            echo "<hr>";
        }
    }
{/dede:php}

代码解析:

  1. $member->GetMemberList(10, 1, 'scores DESC');:这个方法用于获取会员列表。
    • 10:表示获取10个会员。
    • 1:表示第一页。
    • 'scores DESC':按会员积分从高到低排序。
  2. foreach($member_list as $m_info):遍历获取到的会员列表。
  3. $nickname = $m_info['uname'];:对于会员的基本字段(如 userid, uname, email 等),可以直接从数组 $m_info 中获取键名。
  4. $member->GetFieldValue($m_info, 'jianjie');:和单个会员调用一样,使用 GetFieldValue 来获取自定义字段的值。

总结与注意事项

  1. 字段名是关键:务必去后台的“会员模型” -> “字段管理”中,或者直接查看数据库 dede_member_model_field 表,确认你要调用的字段的准确 field 名称。
  2. MemberHandler:这是调用会员模型的核心,确保它在你的代码中可以被正确实例化,在大多数模板中,全局环境已经加载了这个类,所以可以直接使用。
  3. GetFieldValue vs 直接数组访问:基本字段(如 userid, uname)可以直接从 $member_info 数组获取,但对于自定义字段必须使用 GetFieldValue() 方法,因为 DedeCMS 对这些字段的存储方式可能做了特殊处理,这个方法能确保正确获取。
  4. 缓存问题:如果你修改了会员模型字段,前台页面可能没有立即更新,可以尝试清除 DedeCMS 的缓存文件 (/data/cache/) 来解决。
  5. 安全性:在输出用户填写的内容时,如果内容可能包含 HTML 或 JavaScript,建议使用 htmlspecialchars() 函数进行转义,防止 XSS 攻击。echo htmlspecialchars($jianjie);

通过以上方法,你就可以灵活地在 DedeCMS 的任何模板中调用和显示会员模型的自定义字段了。

-- 展开阅读全文 --
头像
计算机二级C语言真的容易学吗?
« 上一篇 今天
织梦模板本身的栏目
下一篇 » 今天

相关文章

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

目录[+]