在 PHP 文件中判断 (最常用)
这是最直接、最常用的方法,通常用在自定义的 PHP 页面、模型处理文件或者需要获取用户详细信息的场景。

(图片来源网络,侵删)
核心函数: CheckPurview('a') 或 global $cfg_ml;
代码示例:
<?php
require_once(dirname(__FILE__)."/include/common.inc.php"); // 引入核心文件
// 方法1:使用 $cfg_ml 全局对象 (推荐)
// $cfg_ml 是一个全局的会员登录对象
global $cfg_ml;
if ($cfg_ml -> IsLogin()) {
// 用户已登录
$userid = $cfg_ml -> GetMID(); // 获取当前登录用户ID
$username = $cfg_ml -> GetUserName(); // 获取当前登录用户名
echo "欢迎您," . $username . "!";
echo "<br>您的用户ID是:" . $userid;
// 可以在这里执行只有登录用户才能操作的操作
// 查询用户的订单、文章、收藏等
} else {
// 用户未登录
echo "您尚未登录,请先登录!";
// 可以在这里跳转到登录页面
// header("Location: /member/login.php");
// exit;
}
?>
代码解析:
require_once(dirname(__FILE__)."/include/common.inc.php");:这是必须的第一步,引入 DedeCMS 的核心初始化文件,它会加载全局变量和函数。global $cfg_ml;:声明$cfg_ml为全局变量,这个变量在common.inc.php中被初始化,包含了当前登录会员的所有信息。$cfg_ml -> IsLogin():这是判断用户是否登录的核心方法,如果返回true,表示已登录;false表示未登录。$cfg_ml -> GetMID()和$cfg_ml -> GetUserName():如果用户已登录,可以使用这些方法获取用户的ID和用户名。
在模板文件 (.htm) 中判断
在模板文件中,你不能直接写 PHP 代码,但 DedeCMS 提供了模板语法来实现这个功能。

(图片来源网络,侵删)
核心标签: {dede:php} ... {/dede:php} 和 {dede:if} ... {/dede:if}
场景1:在首页、列表页等普通模板中
{dede:php}
global $cfg_ml;
if ($cfg_ml -> IsLogin()) {
$username = $cfg_ml -> GetUserName();
// 输出欢迎信息
echo "欢迎您,<strong>" . $username . "</strong>!";
// 输出退出链接
echo "<a href='/member/index_do.php?fmdo=login&dopost=exit'>退出</a>";
} else {
// 输出登录和注册链接
echo "<a href='/member/login.php'>登录</a> | <a href='/member/reg_new.php'>注册</a>";
}
{/dede:php}
场景2:在文章内容页 (article_article.htm) 中
页有更简单的方法,因为文章页已经包含了文章作者的信息。
{dede:php}
// 方法A:直接使用全局对象 (通用)
global $cfg_ml;
if ($cfg_ml -> IsLogin()) {
echo "欢迎您," . $cfg_ml -> GetUserName() . "!";
}
// 方法B:利用文章页的内置变量 (更高效)
// 在文章内容页,$arc 是一个包含文章信息的对象
if ($arc->Userid > 0) {
// 如果文章有作者ID,说明当前登录状态是有效的
// 你可以进一步判断当前登录用户是否是文章作者
if ($arc->Userid == $cfg_ml->GetMID()) {
echo "您是本文作者,可以进行编辑。";
} else {
echo "您已登录,但不是本文作者。";
}
} else {
echo "文章未设置作者或您尚未登录。";
}
{/dede:php}
使用 DedeCMS 的 if 标签 (推荐用于模板)
DedeCMS 提供了强大的 {dede:if} 标签,可以结合 PHP 表达式进行判断,这比使用 {dede:php} 标签更简洁、更符合模板的设计理念。
核心标签: {dede:if} ... {/dede:if}
代码示例 (适用于模板文件 .htm):
{dede:if function="global $cfg_ml; return $cfg_ml->IsLogin();"}
<!-- 如果用户已登录,显示这部分内容 -->
<div class="user-info">
欢迎,<strong>[field name='php']echo $cfg_ml->GetUserName();[/field]</strong>!
<a href="/member/index_do.php?fmdo=login&dopost=exit">退出</a>
</div>
{else /}
<!-- 如果用户未登录,显示这部分内容 -->
<div class="login-link">
<a href="/member/login.php">登录</a> | <a href="/member/reg_new.php">注册</a>
</div>
{/dede:if}
代码解析:
{dede:if function="..."} ... {/dede:if}:这是 DedeCMS 模板的条件判断语法。function="global $cfg_ml; return $cfg_ml->IsLogin();":这里的function属性可以执行一段 PHP 代码,并将最后一句return的值作为判断条件,如果返回true,则执行{dede:if}和{else /}之间的内容;否则执行{else /}和{/dede:if}之间的内容。[field name='php']...[/field]:这是一个内联 PHP 标签,用于在模板中执行简单的 PHP 代码并输出结果,这里用它来获取用户名。
总结与最佳实践
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| PHP 文件 (如自定义页面) | global $cfg_ml; $cfg_ml->IsLogin(); |
直接、高效、功能强大,可获取所有用户信息。 | 需要引入核心文件。 |
模板文件 (.htm) |
{dede:if function="..."} |
代码简洁,符合模板设计逻辑,易于维护。 | 语法相对复杂一点,需要理解 DedeCMS 的模板机制。 |
模板文件 (.htm) |
{dede:php} |
灵活,可以写任意 PHP 代码。 | 混合了 PHP 和 HTML,可读性稍差,不利于模板美工修改。 |
推荐选择:
- 如果你在写 PHP 逻辑代码,毫无疑问使用 方法一。
- 如果你在修改模板文件,强烈推荐使用 方法三 (
{dede:if}),因为它最干净、最专业。 - 方法二 (
{dede:php}) 在某些复杂逻辑下也可以使用,但应尽量避免,以保持模板的整洁性。
