dede未登录时如何显示指定页面?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

使用官方提供的 {dede:php} 标签 (最推荐、最规范)

这是 DedeCMS 官方支持且最灵活的方法,通过在模板中嵌入 PHP 代码来实现逻辑判断,它不会修改核心文件,升级网站时也不会丢失。

dede 如果 没有登录 显示页面
(图片来源网络,侵删)

适用场景:当你想为某个特定的页面(比如文章详情页 article_article.htm 或栏目列表页 list_category.htm)添加登录判断时。

操作步骤

  1. 准备一个提示页面

    • 在你的模板目录(通常是 /templets/你的模板名/)下,创建一个新的 HTML 文件,login_tip.htm
    • 在这个文件里,你可以自定义提示内容和样式,
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>提示 - {dede:global.cfg_webname/}</title>
      <style>
          body { font-family: Arial, sans-serif; text-align: center; padding-top: 100px; }
          .tip-box { border: 1px solid #ddd; padding: 20px; border-radius: 5px; display: inline-block; }
          .tip-box h2 { color: #e74c3c; }
          .tip-box a { color: #3498db; text-decoration: none; }
      </style>
      </head>
      <body>
          <div class="tip-box">
              <h2>访问受限</h2>
              <p>您需要先登录才能查看此内容。</p>
              <p><a href="/member/index.php">点击此处登录</a></p>
          </div>
      </body>
      </html>
  2. 在目标模板文件中添加判断逻辑

    dede 如果 没有登录 显示页面
    (图片来源网络,侵删)
    • 打开你想要设置登录限制的模板文件(article_article.htm)。
    • 显示的核心位置({dede:field.body/} 标签之前或之后),添加以下代码:
    {dede:php}
    // 检查用户是否已登录
    // $cuserLogin 是 DedeCMS 的全局登录对象,如果用户已登录,它会是用户对象,否则为 false
    if (empty($cuserLogin) || $cuserLogin->getUserID() <= 0) {
        // 用户未登录,执行跳转或包含提示页面
        // 方法A: 使用 header 跳转 (简单粗暴)
        // header("location:/member/index.php?jumpurl=".urlencode($cfg_phpurl."/".basename(__FILE__)));
        // exit();
        // 方法B: 包含我们准备好的提示页面 (更友好,能保持页面样式)
        // $this 是当前模板的对象,我们可以用它来解析和包含另一个模板
        $this->LoadTemplate($GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'].'/你的模板名/login_tip.htm');
        exit(); // 停止执行当前模板的其余部分
    }
    {/dede:php}

代码解释

  • {dede:php}...{/dede:php}:这是 DedeCMS 的 PHP 代码执行标签。
  • $cuserLogin:这是 DedeCMS 中一个非常重要的全局变量,代表了当前登录的用户,如果用户未登录,它的值是 false 或者 userID 为 0。
  • $this->LoadTemplate(...):这是加载并解析另一个模板文件的方法,你需要确保路径正确,指向你刚刚创建的 login_tip.htm
  • exit():在显示提示页面后,必须调用 exit() 来停止当前页面的继续渲染,否则原始页面的内容(如文章标题、页脚等)还是会显示出来。

修改 PHP 源文件 (功能级控制)

如果你想对整个栏目特定模型都进行登录控制,修改 PHP 源文件是更直接的方法。

适用场景:一个“付费文章”栏目,里面的所有文章都必须登录后才能查看。

操作步骤

dede 如果 没有登录 显示页面
(图片来源网络,侵删)
  1. 找到并打开 PHP 文件

    • 根据你要控制的页面类型,找到对应的 PHP 文件,通常它们位于 /include/ 目录下。
      • /include/helpers/archive.helper.php
      • 列表页/include/helpers/list.helper.php
      • 频道页/封面页/include/helpers/channel.helper.php
  2. 在文件开头添加登录判断

    • archive.helper.php 为例,这个文件处理文章的显示逻辑,在它的开头部分(<?php 之后),添加如下代码:
    <?php
    // ... 文件顶部可能已经有其他代码 ...
    // 引入用户登录检测函数
    // 如果没有引入,需要手动引入
    // require_once(DEDEINC.'/memberlogin.class.php');
    // 检查用户是否登录
    if (empty($cuserLogin) || $cuserLogin->getUserID() <= 0) {
        // 用户未登录,跳转到登录页面
        // 可以带上当前页面的地址,登录后可以跳转回来
        $gourl = $_SERVER['PHP_SELF'] . "?" . $_SERVER['QUERY_STRING'];
        $loginUrl = "/member/index.php?gourl=" . urlencode($gourl);
        header("Location:{$loginUrl}");
        exit();
    }
    // ... 文件原有的其他代码 ...
    ?>

代码解释

  • 这种方法是在服务器端进行判断,在页面内容生成之前就进行拦截。
  • $_SERVER['PHP_SELF'] . "?" . $_SERVER['QUERY_STRING']:可以获取当前页面的完整 URL,用于登录后跳转回来,用户体验更好。
  • 注意:修改核心文件后,如果未来升级 DedeCMS,这些修改可能会被覆盖,需要重新进行修改。

使用自定义模型字段 + 前端判断 (灵活但复杂)

这种方法非常灵活,可以给每篇文章单独设置是否需要登录查看,但实现起来也最复杂。

适用场景:网站中只有少数几篇文章需要登录查看,大部分文章公开。

操作思路

  1. 后台创建模型字段

    • 进入“核心” -> “内容模型管理”,选择你的文章模型(如“文章系统”)。
    • 点击“字段管理”,添加一个新字段,
      • 字段名need_login
      • 字段类型:“单选框”
      • 选项值是,否
      • 默认值
  2. 发布文章时设置

    在后台发布或编辑文章时,就会出现一个“是否需要登录”的选项,你可以根据需要勾选。

  3. 修改模板文件

    • article_article.htm 中,使用 DedeCMS 的条件标签 {dede:if} 来判断这个字段。
    {dede:field.need_login runphp='yes'}
    if(@me == '是') {
        @me = '<div class="login-required">此内容需要登录后查看。</div>';
    } else {
        @me = ''; // 如果不需要登录,显示空内容
    }
    {/dede:field.need_login}
    {dede:php}
    // 如果需要登录,且用户未登录,则显示提示并停止渲染
    if (strpos(@me, 'login-required') !== false && (empty($cuserLogin) || $cuserLogin->getUserID() <= 0)) {
        // 这里可以复用方法一的提示页面
        $this->LoadTemplate($GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'].'/你的模板名/login_tip.htm');
        exit();
    }
    {/dede:php}
    <!-- 正常的文章内容 -->
    {dede:field.body/}

这种方法结合了模型字段和后端逻辑,虽然步骤多,但可控性最强。

总结与推荐

方法 优点 缺点 推荐度
{dede:php} 规范、安全、不修改核心文件、升级无忧 需要懂一点 PHP,路径要写对 ⭐⭐⭐⭐⭐ (强烈推荐)
修改 PHP 源文件 控制力强,适合批量操作(如整个栏目) 修改核心文件,升级后可能丢失 ⭐⭐⭐ (适用于特定需求)
自定义字段 灵活性极高,可精细化控制每篇内容 实现复杂,需要后台和前端配合 ⭐⭐ (适用于特殊需求)

对于绝大多数情况,强烈推荐使用方法一,它既实现了功能,又保持了 DedeCMS 模块的整洁性和可维护性。

-- 展开阅读全文 --
头像
dede wap模块生成路径怎么设置?
« 上一篇 2025-12-16
dede diy.php生成时间如何优化?
下一篇 » 2025-12-16

相关文章

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

目录[+]