织梦dedecms如何获取会员信息?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

在模板文件中直接获取当前登录会员信息(最常用)

这是最常见的需求,比如在网站的“会员中心”或页面头部显示“欢迎,[用户名]!”,织梦提供了非常便捷的模板标签来实现。

织梦dedecms获取会员信息
(图片来源网络,侵删)

场景:在 .htm 模板文件中获取当前登录会员的信息。

步骤:

  1. 确保会员已登录:这个方法的前提是用户已经登录了你的网站。
  2. 使用 {dede:global}:织梦提供了一个全局变量 cfg_member_id 来存储当前登录会员的ID,我们可以通过这个ID去获取其他信息。
  3. 组合使用 GetOneMember 函数:这是一个强大的自定义函数,可以通过会员ID获取该会员的完整信息。

示例代码:

假设你想在模板页面的某个位置显示当前登录会员的用户名、邮箱和积分。

{dede:php}
    // 检查用户是否登录,如果未登录则不执行任何操作
    if ($cfg_ml->IsLogin()) {
        // 获取当前登录会员的ID
        $mid = $cfg_ml->M_ID;
        // 调用GetOneMember函数获取会员信息
        $member_info = GetOneMember($mid);
        // 将获取到的信息赋值给模板变量,以便在后续HTML中使用
        // 用户名
        $GLOBALS['member_username'] = $member_info['uname'];
        // 邮箱
        $GLOBALS['member_email'] = $member_info['email'];
        // 积分
        $GLOBALS['member_scores'] = $member_info['scores'];
    }
{/dede:php}
<!-- 在HTML中显示这些信息 -->
<div class="member-info">
    {dede:global name='member_username'/},欢迎您!
    <br>
    您的邮箱是:{dede:global name='member_email'/}
    <br>
    您的当前积分是:{dede:global name='member_scores'/}
</div>
<!-- 如果用户未登录,可以显示登录链接 -->
<div class="member-info">
    {dede:if !isset($member_username)}
        您尚未登录,请先<a href="{dede:global name='cfg_memberurl'/}/index_do.php?fmdo=user&dopost=login">登录</a>。
    {/dede:if}
</div>

代码解析:

  • {dede:php}...{/dede:php}:用于在模板中执行PHP代码。
  • $cfg_ml->IsLogin():判断当前用户是否已登录。
  • $cfg_ml->M_ID:获取当前登录会员的ID。
  • GetOneMember($mid):核心函数,它接收一个会员ID,返回一个包含该会员所有信息的数组,这个数组里包含了 uname (用户名), email (邮箱), scores (积分), sex (性别), mtype (会员类型) 等等。
  • $GLOBALS['xxx']:将PHP变量设置为全局变量,这样 {dede:global name='xxx'/} 标签才能在模板的HTML部分读取到。
  • {dede:if !isset($member_username)}:一个简单的条件判断,$member_username 变量不存在(即用户未登录),则显示登录链接。

在PHP文件中获取会员信息

如果你是在自定义的PHP文件(比如插件、模块或处理页面)中需要获取会员信息,方法更直接。

场景:在 member/ 目录下的某个PHP文件,或者你自定义的PHP文件中。

步骤:

  1. 引入核心文件:确保你的PHP文件已经引入了 include_once(dirname(__FILE__).'/../include/common.inc.php');
  2. 使用 $cfg_ml 全局对象:这个对象代表了当前登录的会员实例。

示例代码:

假设你有一个文件 my_member_profile.php

织梦dedecms获取会员信息
(图片来源网络,侵删)
<?php
require_once(dirname(__FILE__) . '/config.php'); // 引入DedeCMS配置
require_once(DEDEINC.'/membermodel.class.php'); // 引入会员模型类(如果需要)
// 检查用户是否登录
if ($cfg_ml->IsLogin()) {
    // 获取会员ID
    $member_id = $cfg_ml->M_ID;
    // 获取会员用户名
    $member_username = $cfg_ml->M_UserName;
    // 获取会员等级
    $member_mtype = $cfg_ml->M_MbType;
    // 如果需要更详细的信息,可以像方法一那样使用GetOneMember函数
    $member_info = GetOneMember($member_id);
    // 现在你就可以在PHP中使用这些变量了
    echo "欢迎, " . $member_username . "!";
    echo "<br>你的会员等级是: " . $member_mtype;
    echo "<br>你的邮箱是: " . $member_info['email'];
} else {
    // 如果用户未登录,可以跳转到登录页面
    header("Location: {$cfg_memberurl}/index_do.php?fmdo=user&dopost=login");
    exit();
}
?>

代码解析:

  • $cfg_ml:这是全局的会员操作对象,封装了会员相关的常用方法。
  • $cfg_ml->M_ID, $cfg_ml->M_UserName, $cfg_ml->M_MbType:直接通过对象属性获取会员的基本信息。
  • GetOneMember($member_id):同样适用,可以获取一个包含所有字段的详细信息数组。

通过SQL查询直接获取(不推荐,但了解无妨)

理论上,你可以直接去 dede_member 表里查数据,但强烈不推荐这样做,因为它绕过了DedeCMS的封装和缓存机制,且代码耦合度高,不利于后期维护。

场景:仅当你需要获取的信息在 GetOneMember 函数中没有提供时,才考虑此方法。

示例代码(在PHP文件中):

// ... (前面的引入和登录判断代码相同)
if ($cfg_ml->IsLogin()) {
    $member_id = $cfg_ml->M_ID;
    // 直接使用dsql执行查询
    $row = $dsql->GetOne("SELECT * FROM `dede_member` WHERE mid = '$member_id'");
    if (is_array($row)) {
        $email = $row['email'];
        $scores = $row['scores'];
        // ... 其他字段
    }
}

为什么不推荐?

  • 安全性:虽然这里ID是固定的,但如果处理不当,容易引发SQL注入。
  • 效率:不如封装好的函数高效。
  • 可维护性:如果未来DedeCMS修改了数据库表结构,你的代码就会失效。

总结与最佳实践

场景 推荐方法 核心代码/标签 优点
在模板文件中显示 方法一 {dede:php} GetOneMember($mid); {/dede:php} + {dede:global} 简洁、高效、符合模板与逻辑分离的思想。
在PHP文件中处理 方法二 $cfg_ml 对象 + GetOneMember() 功能强大、灵活,适合复杂的业务逻辑。
底层或特殊查询 方法三(不推荐) $dsql->GetOne() 了解即可,除非万不得已不要使用。

核心要点:

织梦dedecms获取会员信息
(图片来源网络,侵删)
  1. 判断登录:所有操作前,务必用 $cfg_ml->IsLogin(){dede:php} if($cfg_ml->IsLogin()) { ... } {/dede:php} 判断用户是否登录。
  2. 核心函数GetOneMember() 是获取会员信息的利器,无论是模板还是PHP文件都非常实用。
  3. 全局对象:在PHP文件中,$cfg_ml 是你的好朋友,用它来获取当前会员的ID和基本信息最方便。

希望这份详细的指南能帮助你顺利地在织梦DedeCMS中获取会员信息!

-- 展开阅读全文 --
头像
dede field.body如何修改?
« 上一篇 昨天
dede robots.txt如何正确写法?
下一篇 » 昨天

相关文章

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