在模板文件中直接获取当前登录会员信息(最常用)
这是最常见的需求,比如在网站的“会员中心”或页面头部显示“欢迎,[用户名]!”,织梦提供了非常便捷的模板标签来实现。

(图片来源网络,侵删)
场景:在 .htm 模板文件中获取当前登录会员的信息。
步骤:
- 确保会员已登录:这个方法的前提是用户已经登录了你的网站。
- 使用
{dede:global}:织梦提供了一个全局变量cfg_member_id来存储当前登录会员的ID,我们可以通过这个ID去获取其他信息。 - 组合使用
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文件中。
步骤:
- 引入核心文件:确保你的PHP文件已经引入了
include_once(dirname(__FILE__).'/../include/common.inc.php');。 - 使用
$cfg_ml全局对象:这个对象代表了当前登录的会员实例。
示例代码:
假设你有一个文件 my_member_profile.php。

(图片来源网络,侵删)
<?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() |
了解即可,除非万不得已不要使用。 |
核心要点:

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