织梦如何调用会员登录状态?

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

使用全局变量 $cfg_ml (最常用、最直接)

这是织梦官方推荐也是最核心的方法。$cfg_ml 是一个全局的会员登录对象,在织梦的任何页面(包括首页、列表页、内容页、自定义页面等)都可以直接调用。

织梦调用会员登入状态
(图片来源网络,侵删)

判断是否登录

$cfg_ml 对象有一个属性 IsLogin,可以直接用来判断会员是否登录。

{php}
    // 引入全局会员对象
    global $cfg_ml;
    // 判断是否已登录
    if ($cfg_ml->IsLogin) {
        // 如果已登录,执行这里的代码
        echo '欢迎您,' . $cfg_ml->M_UserName . '!';
    } else {
        // 如果未登录,执行这里的代码
        echo '您尚未登录,请先登录。';
    }
{/php}

代码解释:

  • {php} ... {/php}:这是织梦的PHP代码块,用于执行原生PHP。
  • global $cfg_ml;:声明 $cfg_ml 为全局变量,确保可以访问到。
  • $cfg_ml->IsLogin:这是一个布尔值,true 表示已登录,false 表示未登录。
  • $cfg_ml->M_UserName:获取当前登录会员的用户名。

获取更多会员信息

$cfg_ml->M 对象包含了当前登录会员的详细信息,你可以通过 $cfg_ml->M->字段名 来获取。

常用字段包括:

织梦调用会员登入状态
(图片来源网络,侵删)
  • M_ID:会员ID
  • M_UserName:会员用户名
  • M_UniName:会员唯一标识(用户名或UID)
  • M_Email:会员邮箱
  • M_Money:会员余额
  • M_Scores:会员积分
  • M_RegTime:注册时间
  • M_LastLoginIP:最后登录IP
  • M_LoginTime:最后登录时间

示例:在页面头部显示登录状态

<div class="user-status">
    {php}
        global $cfg_ml;
        if ($cfg_ml->IsLogin) {
            // 已登录状态
            echo '<a href="/member/">会员中心</a> | ';
            echo '<a href="/member/index.php?uid=' . $cfg_ml->M_ID . '">我的主页</a> | ';
            echo '<a href="/member/index.php?uid=' . $cfg_ml->M_ID . '">欢迎,' . $cfg_ml->M_UserName . '</a> | ';
            echo '<a href="/member/logout.php">退出</a>';
        } else {
            // 未登录状态
            echo '<a href="/member/login.php">登录</a> | ';
            echo '<a href="/member/reg.php">注册</a>';
        }
    {/php}
</div>

使用织梦的 if 标签 (更简洁的模板写法)

如果你觉得 {php} 标签有点冗长,织梦也提供了一个专门的 if 标签,它底层也是调用 $cfg_ml,但语法更简洁,适合在模板中直接使用。

注意: 此方法在较新版本的织梦中支持性很好,但在一些非常旧的版本中可能不稳定,如果出现问题,优先使用方法一。

判断是否登录

{dede:if function='IsLogin()'}
    <!-- 已登录时显示的内容 -->
    <span>欢迎您,<strong>{dede:php}echo $cfg_ml->M_UserName;{/dede:php}</strong>!</span>
    <a href="/member/index.php?uid={dede:php}echo $cfg_ml->M_ID;{/dede:php}">会员中心</a>
    <a href="/member/logout.php">退出</a>
{else}
    <!-- 未登录时显示的内容 -->
    <a href="/member/login.php">登录</a>
    <a href="/member/reg.php">注册</a>
{/dede:if}

代码解释:

织梦调用会员登入状态
(图片来源网络,侵删)
  • {dede:if function='IsLogin()'}:这里的 IsLogin() 函数就是方法一中 $cfg_ml->IsLogin 的封装。
  • {dede:php} ... {/dede:php}:这是嵌套在 if 标签内的PHP代码块,用于获取会员信息。

结合其他条件判断

你还可以结合其他会员信息进行判断,判断会员是否为VIP。

{dede:if function='IsLogin()'}
    {dede:php}
        global $cfg_ml;
        $isVip = ($cfg_ml->M->M_Type == 2); // 假设M_Type=2代表VIP会员
    {/dede:php}
    {if $isVip}
        <span style="color: gold;">尊敬的VIP会员,欢迎回来!</span>
    {else}
        <span>欢迎您,普通会员!</span>
        <a href="/member/vip.php">升级VIP</a>
    {/if}
    <a href="/member/logout.php">退出</a>
{else}
    <a href="/member/login.php">登录</a>
    <a href="/member/reg.php">注册</a>
{/dede:if}

在自定义页面或PHP文件中调用

如果你想在织梦后台创建的“自定义页面”或者自己新建的PHP文件中调用会员状态,需要先引入织梦的核心文件。

示例:在 my_custom_page.php 文件中

<?php
    // 1. 定义相对根目录
    define('DEDEINC', dirname(__FILE__) . '/include');
    // 2. 引入common.func.php和memberlogin.class.php
    //    common.func.php 提供了IsLogin等函数
    //    memberlogin.class.php 是会员登录类的核心
    require_once(DEDEINC . '/dedetag.class.php');
    require_once(DEDEINC . '/common.func.php');
    require_once(DEDEINC . '/memberlogin.class.php');
    // 3. 初始化会员登录对象
    //    这一步至关重要,它会自动处理Session,并填充 $cfg_ml 对象
    $cfg_ml = new MemberLogin();
    // 4. 现在就可以像方法一一样使用了
    if ($cfg_ml->IsLogin) {
        echo '<h1>欢迎,' . $cfg_ml->M_UserName . '!</h1>';
        echo '<p>您的ID是:' . $cfg_ml->M_ID . '</p>';
        echo '<a href="/member/logout.php">退出登录</a>';
    } else {
        echo '<h1>您还未登录</h1>';
        echo '<a href="/member/login.php">请登录</a>';
    }
?>

总结与最佳实践

方法 优点 缺点 适用场景
$cfg_ml 最稳定、最通用,官方标准,适用于所有页面。 代码稍显冗长,需要写PHP代码块。 所有场景,尤其是需要复杂逻辑时。
if 模板代码简洁,可读性好,适合前端人员。 对织梦版本有一定要求,灵活性不如PHP代码。 简单的登录/未登录状态切换,如页面头部、底部。
引入核心文件 灵活性最高,可以在任何PHP文件中实现。 需要手动引入文件,代码量稍多。 自定义PHP页面、二次开发插件等。

推荐流程:

  1. 在模板文件(如 head.htm)中,优先使用 方法二 (if,因为它最简洁。
  2. if 标签无法满足需求(例如需要获取多个会员信息或进行复杂判断),则使用 方法一 ($cfg_ml)
  3. 在独立的PHP文件中,必须使用 方法三,先引入核心文件再进行操作。

通过以上方法,你就可以在织梦网站的任何地方灵活地调用和判断会员的登录状态了。

-- 展开阅读全文 --
头像
页简介如何正确调用?
« 上一篇 03-08
织梦如何判断栏目是否有子栏目?
下一篇 » 03-08

相关文章

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