在模板文件中使用全局变量(最常用)
DedeCMS 在用户登录后,会将用户信息存入一个全局变量中,在模板文件中,可以直接调用这个变量。
核心变量: $_SESSION['dede_field']
这个变量是一个数组,存储了当前登录用户的详细信息,包括用户名、UID、积分等。
获取用户名
用户名存储在 $_SESSION['dede_field']['uname'] 中。
示例代码:
{if $_SESSION['dede_uid']}
欢迎您,<strong>{$_SESSION['dede_field']['uname']}</strong>!
{else}
您尚未登录,请先登录。
{/if}
代码解释:
{if $_SESSION['dede_uid']}:这是一个判断条件,检查用户是否已登录。$_SESSION['dede_uid']是当前登录用户的ID,如果存在,则说明用户已登录,这是一种比直接判断uname是否存在更严谨的方式。{$_SESSION['dede_field']['uname']}:直接输出用户名。{else}:如果用户未登录,则显示提示信息。
获取用户ID
用户ID存储在 $_SESSION['dede_uid'] 中。
示例代码:
您的用户ID是:{$_SESSION['dede_uid']}
获取其他用户信息
同样,用户的其他信息也可以通过 $_SESSION['dede_field'] 数组获取。
- 会员等级:
{$_SESSION['dede_field']['mtype']} - 会员积分:
{$_SESSION['dede_field']['scores']} - 注册邮箱:
{$_SESSION['dede_field']['email']}
综合示例(一个简单的会员信息栏):
{if $_SESSION['dede_uid']}
<div class="user-info">
<p>欢迎您,<a href="/member/index.php">{$_SESSION['dede_field']['uname']}</a>!</p>
<p>积分:<span>{$_SESSION['dede_field']['scores']}</span></p>
<p><a href="/member/index.php">会员中心</a> | <a href="/member/logout.php">退出登录</a></p>
</div>
{else}
<div class="login-area">
<a href="/member/login.php">登录</a> | <a href="/member/reg.php">注册</a>
</div>
{/if}
在PHP代码文件中获取
如果您是在自定义的PHP文件(在 /member/ 目录下新建的PHP文件)中获取用户名,方法略有不同,需要先引入DedeCMS的核心文件。
示例代码:
假设您有一个文件 /member/my_profile.php,您想在这个文件里获取用户名。
<?php
// 1. 引入DedeCMS的配置文件和核心文件
// define('DEDEMEMBER', $cfg_cmspath.'/member'); // 如果在member目录下,这句可能不需要,但为了保险可以加上
require_once(dirname(__FILE__).'/config.php');
require_once(DEDEINC.'/dedemember.cls.php');
// 2. 检查用户是否登录
if ($cfg_ml->IsLogin()) {
// 3. 获取用户信息
// $cfg_ml->M_ID 是用户ID
// $cfg_ml->M_UserName 是用户名
// $cfg_ml->M_MbType 是会员等级
// $cfg_ml->M_Scores 是积分
$username = $cfg_ml->M_UserName;
$uid = $cfg_ml->M_ID;
$scores = $cfg_ml->M_Scores;
echo "当前登录的用户名是:" . $username;
echo "<br>用户ID是:" . $uid;
echo "<br>当前积分是:" . $scores;
} else {
echo "您尚未登录,请先登录。";
// 可以跳转到登录页面
// header("Location: login.php");
}
?>
代码解释:
require_once(dirname(__FILE__).'/config.php');:引入DedeCMS的全局配置文件,这是必须的。$cfg_ml:这是DedeCMS的会员操作核心对象,通过它可以获取当前登录会员的所有信息。$cfg_ml->IsLogin():判断用户是否已登录,返回true或false。$cfg_ml->M_UserName:直接获取当前登录用户的用户名。
常见问题与注意事项
-
为什么我的代码不显示?
- 最可能的原因:用户未登录。 请确保您已经用正确的账号在网站前台登录了,DedeCMS的会员登录和后台管理员登录是分开的。
- 检查变量名拼写: 确保变量名拼写正确,
$_SESSION['dede_field']['uname']中的uname不要写成username。
-
如何获取当前登录的管理员用户名?
- 获取后台管理员用户名和获取前台会员用户名的方法不同,使用的是不同的全局变量。
- 核心变量:
$cuserLogin - 示例:
// 在需要判断管理员权限的PHP文件中 if ($cuserLogin->getUserName() != '') { $admin_name = $cuserLogin->getUserName(); echo "欢迎,管理员 " . $admin_name; } - 在模板文件中,通常不直接获取管理员名,而是在PHP逻辑里判断权限后,再传递给模板。
| 场景 | 变量/方法 | 示例 |
|---|---|---|
| 模板文件 (.htm) | 获取用户名 | {$_SESSION['dede_field']['uname']} |
| 模板文件 (.htm) | 判断是否登录 | {if $_SESSION['dede_uid']}...{/if} |
| PHP文件 | 获取用户名 | $cfg_ml->M_UserName (需先登录和引入核心文件) |
| PHP文件 | 判断是否登录 | $cfg_ml->IsLogin() (需先引入核心文件) |
对于绝大多数前端模板开发需求,使用 方法一 中的全局变量 $_SESSION['dede_field']['uname'] 就足够了。
