- 获取会员对象:通过 DedeCMS 的全局变量
$cfg_ml来获取当前登录会员的对象。 - 调用会员信息:通过获取到的会员对象,访问其内部的
fields属性来读取具体的会员信息,如用户名、UID、邮箱等。
下面我将为你提供详细的代码示例、说明以及常见问题的解决方法。

(图片来源网络,侵删)
核心代码与示例
最核心的代码是 $cfg_ml->fields,这是一个包含了当前登录会员所有信息的数组。
示例1:在模板文件中直接调用
假设你希望在某个模板文件(如 article_article.htm 或 index.htm)中显示当前登录会员的用户名和邮箱。
{dede:php}
// 1. 检查用户是否登录
if ($cfg_ml->IsLogin()) {
// 2. 如果已登录,则获取会员信息
// $cfg_ml->fields 是一个关联数组,键名为字段名
$memberInfo = $cfg_ml->fields;
// 3. 输出会员信息
// 使用 {$memberInfo.字段名} 的方式在模板中显示
// 显示用户名、UID和邮箱
echo "欢迎您," . $memberInfo['uname'] . "!<br>";
echo "您的用户ID是:" . $memberInfo['mid'] . "<br>";
echo "您的注册邮箱是:" . $memberInfo['email'];
} else {
// 4. 如果未登录,则显示登录入口
echo "<a href='/member/index.php'>请先登录</a>";
}
{/dede:php}
代码解析:
{dede:php}...{/dede:php}:这是 DedeCMS 的 PHP 代码块,用于在模板中直接执行 PHP 逻辑。$cfg_ml:这是 DedeCMS 的一个全局会员登录对象,它在页面加载时自动初始化。$cfg_ml->IsLogin():这是一个非常重要的方法,用于判断当前用户是否处于登录状态。强烈建议在调用会员信息前,先使用此方法进行判断,以避免未登录用户出现错误。$cfg_ml->fields:这是一个关联数组,存储了当前登录会员在dede_member表中的所有字段信息。mid:会员ID (主键)mtype:会员类型matt:会员等级 (0为普通会员,>0为管理员或特殊会员)uname:用户名pwd:密码 (已加密)email:电子邮箱scores:积分money:余额jointime:注册时间joinip:注册IPlogintime:最后登录时间loginip:最后登录IP
示例2:在自定义函数或PHP文件中调用
如果你在 include/helpers/ 目录下的自定义函数文件,或者一个独立的PHP页面中调用,你需要先引入DedeCMS的核心文件。

(图片来源网络,侵删)
<?php
// 引入DedeCMS的核心文件路径,根据你的实际安装位置调整
// 如果是在dedecms根目录下的PHP文件,可以这样引入
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once (DEDEINC . "/memberlogin.class.php");
// 创建会员登录类实例,并尝试从session中恢复登录状态
$cfg_ml = new MemberLogin();
// 判断是否登录
if ($cfg_ml->IsLogin()) {
// 获取会员信息
$memberInfo = $cfg_ml->fields;
// 现在你可以使用 $memberInfo 变量了
$username = $memberInfo['uname'];
$uid = $memberInfo['mid'];
echo "当前登录用户: " . $username . " (ID: " . $uid . ")";
// 更新会员积分
// $scores = intval($memberInfo['scores']) + 10;
// $dsql->ExecuteNoneQuery("UPDATE `dede_member` SET `scores`='$scores' WHERE `mid`='$uid'");
} else {
echo "用户未登录";
}
?>
常见问题与注意事项
为什么我的代码不生效?提示 "未登录" 或变量未定义?
最常见的原因是作用域问题。
- 问题:
$cfg_ml是一个全局变量,如果你在一个函数内部直接使用它,PHP 会认为这是一个局部变量,从而导致 "未定义变量" 的错误。 - 解决方法:在函数内部,你需要使用
global $cfg_ml;来声明它,或者使用$GLOBALS['cfg_ml']来访问。
错误示例(在函数内):
function showMemberInfo() {
// 错误!这里的 $cfg_ml 是一个未定义的局部变量
if ($cfg_ml->IsLogin()) {
// ...
}
}
正确示例(在函数内):
function showMemberInfo() {
// 方法一:使用 global 关键字
global $cfg_ml;
if ($cfg_ml->IsLogin()) {
echo "欢迎, " . $cfg_ml->fields['uname'];
}
// 方法二:使用 $GLOBALS 超全局数组 (推荐)
if ($GLOBALS['cfg_ml']->IsLogin()) {
echo "欢迎, " . $GLOBALS['cfg_ml']->fields['uname'];
}
}
如何获取会员的扩展资料(如:性别、生日、昵称等)?
DedeCMS 的会员信息分为主表 (dede_member) 和附表 (dede_member_tj)。

(图片来源网络,侵删)
- 主表信息:通过
$cfg_ml->fields可以直接获取,如用户名、邮箱等。 - 附表信息:需要额外查询数据库来获取。
示例代码:
{dede:php}
if ($cfg_ml->IsLogin()) {
$mid = $cfg_ml->fields['mid'];
// 引入数据库连接对象
global $dsql;
// 查询附表中的信息
$row = $dsql->GetOne("SELECT `mtype`, `sex` FROM `dede_member_tj` WHERE `mid` = '$mid'");
if (is_array($row)) {
echo "会员类型: " . $row['mtype'] . "<br>";
echo "性别: " . $row['sex'];
} else {
echo "该会员暂无扩展资料。";
}
}
{/dede:php}
如何判断会员是否为管理员?
可以通过 $cfg_ml->fields['matt'] 字段的值来判断。
matt的值 大于 0,则该会员是管理员或有特殊权限的会员。matt的值 等于 0,则该会员是普通会员。
示例代码:
{dede:php}
if ($cfg_ml->IsLogin()) {
if ($cfg_ml->fields['matt'] > 0) {
echo "欢迎管理员 " . $cfg_ml->fields['uname'] . "!";
} else {
echo "欢迎普通会员 " . $cfg_ml->fields['uname'] . "!";
}
}
{/dede:php}
| 需求 | 核心代码 | 说明 |
|---|---|---|
| 判断是否登录 | $cfg_ml->IsLogin() |
必须先判断,避免错误。 |
| 获取会员基本信息 | $cfg_ml->fields['字段名'] |
如 uname, email, mid 等,来自主表。 |
| 获取会员扩展信息 | $dsql->GetOne("SELECT ... FROMdede_member_tj |
需要手动查询数据库附表。 |
| 判断是否为管理员 | $cfg_ml->fields['matt'] > 0 |
matt > 0 为管理员,= 0 为普通会员。 |
| 在函数内使用 | global $cfg_ml; 或 $GLOBALS['cfg_ml'] |
解决变量作用域问题。 |
希望这份详细的指南能帮助你在 DedeCMS V5.7 中顺利调用当前登录会员的信息!
