dede如何设置登录后才可浏览指定栏目?

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

使用DedeCMS内置的 {dede:php} 标签(推荐,最简单)

这种方法的核心思想是:在栏目的列表页模板(list_*.htm)中,使用 {dede:php} 标签编写PHP代码,在页面加载时检查用户是否登录,如果未登录,则直接跳转到登录页面。

dede怎样实现登录后才能浏览栏目
(图片来源网络,侵删)

优点:

  • 无需修改核心文件,升级DedeCMS时不易丢失。
  • 实现简单,直接在模板文件中操作。

缺点:

  • 如果用户直接访问内容页(article_*.htm),此方法无效,因为内容页模板是独立的。

操作步骤:

  1. 找到栏目列表页模板 登录你的DedeCMS后台,进入【模板】->【默认模板管理】。 找到你想要设置权限的那个栏目所使用的列表页模板,模板文件名通常类似于 list_article.htmlist_product.htm 等,点击右侧的【修改】按钮。

  2. 在模板文件中添加PHP判断代码list_*.htm 文件的开头,在 <!DOCTYPE html> 之前,或者 {dede:include filename="head.htm" /} 这行代码之前,添加以下代码:

    dede怎样实现登录后才能浏览栏目
    (图片来源网络,侵删)
    {dede:php}
    // 判断用户是否登录
    if($cfg_ml->IsLogin() == false)
    {
        // 如果未登录,则跳转到登录页面
        // $cfg_cmspath 是网站根目录,确保跳转路径正确
        // '&gotopage='.urlencode($cfg_phpurl."/list.php?tid=".$this->TypeID) 这部分代码可以让用户登录后自动跳转回当前栏目
        $loginUrl = $cfg_cmspath."/member/index.php?uid={$cfg_ml->M_ID}&gotopage=".urlencode($cfg_phpurl."/list.php?tid=".$this->TypeID);
        echo "<script language='javascript'>location.href='".$loginUrl."';</script>";
        exit();
    }
    {/dede:php}
  3. 保存并更新 点击模板编辑器右上角的【保存】按钮。

  4. 生成栏目HTML 去【栏目】->【更新栏目HTML】或【一键更新网站】,重新生成这个栏目的静态页面,这样,所有访问该栏目列表页的未登录用户都会被强制跳转到登录页面。


修改核心PHP文件(功能更全面)

这种方法通过修改处理栏目列表请求的核心PHP文件,来实现更严格的控制,它可以同时控制列表页和内容页的访问权限。

优点:

dede怎样实现登录后才能浏览栏目
(图片来源网络,侵删)
  • 控制更全面,可以同时保护列表页和内容页。
  • 逻辑更清晰,与模板分离。

缺点:

  • 修改了核心文件,升级DedeCMS后需要重新修改。
  • 如果修改错误,可能会导致网站无法正常运行。

操作步骤:

  1. 找到并打开核心文件 使用FTP或文件管理器,登录你的网站服务器,找到并下载 /include/arc.listview.class.php 文件,这个文件是DedeCMS处理所有栏目列表页面的核心类文件。

  2. 在文件中添加权限判断代码 用代码编辑器(如VS Code, Sublime Text, Notepad++)打开 arc.listview.class.php 文件。 找到 ParseTempletsFirst() 函数,这个函数在解析模板最开始时被调用,我们就在这个函数的开头添加权限判断代码。

    function ParseTempletsFirst() 函数内部,第一行 require_once(DEDEINC."/dedetemplate.class.php"); 的后面,添加如下PHP代码:

    // ----------------- 添加开始:登录才能浏览栏目 -----------------
    // 引入会员类
    require_once(DEDEINC.'/memberlogin.class.php');
    $ml = new MemberLogin();
    // 判断用户是否登录
    if($ml->M_ID <= 0)
    {
        // 如果未登录,获取当前栏目ID
        $tid = (isset($this->TypeID) && is_numeric($this->TypeID)) ? $this->TypeID : 0;
        // 构建登录后跳转的URL,登录后自动回到当前栏目
        $gourl = $GLOBALS['cfg_phpurl'].'/member/index.php?gotopage='.urlencode($GLOBALS['cfg_phpurl'].'/list.php?tid='.$tid);
        // 使用系统自带的提示函数,并跳转
        ShowMsg('您尚未登录,请先登录!', $gourl, 0, 2000);
        exit();
    }
    // ----------------- 添加结束 -----------------

    代码解释:

    • require_once(DEDEINC.'/memberlogin.class.php');:引入会员登录类。
    • $ml = new MemberLogin();:实例化一个登录对象。
    • $ml->M_ID <= 0:这是判断用户是否登录的关键,如果用户未登录,M_ID 的值会是0或小于0。
    • $tid = ...:获取当前正在访问的栏目ID,以便登录后能跳转回来。
    • $gourl = ...:构建一个登录URL,并包含 gotopage 参数,告诉登录页面成功后该跳转到哪里。
    • ShowMsg(...):这是DedeCMS内置的一个提示和跳转函数,它会显示一个提示框,并在指定时间后跳转。
    • exit();:执行跳转后,立即终止脚本执行,防止页面继续加载。
  3. 保存文件并上传 保存修改后的 arc.listview.class.php 文件,并通过FTP上传回服务器的原位置,覆盖旧文件。

  4. 更新缓存 登录DedeCMS后台,进入【系统】->【系统基本参数】->【性能选项】,点击【更新系统缓存】。

注意: 这种方法只保护了列表页,如果你想同时保护内容页(article_*.htm),你需要用类似的方法去修改 /include/arc.archives.class.php 文件,在它的 ParseTempletsFirst() 函数里也加上相同的权限判断代码。


总结与建议

特性 方法一 (模板标签) 方法二 (修改核心文件)
实现难度 简单 中等
维护性 (升级无忧) (需重新修改)
控制范围 仅列表页 列表页 + 内容页(需额外修改)
推荐度 ★★★★★ (对大多数场景足够) ★★★☆☆ (需要更全面控制时使用)

给你的建议:

  • 如果你只是想让普通用户在访问某个栏目列表时被要求登录,而内容页可以公开(或者你通过其他方式保护内容页),强烈推荐使用方法一,它最安全、最方便。
  • 如果你希望整个栏目(包括列表和所有文章内容)都对未登录用户完全隐藏,那么可以考虑使用方法二,但请务必小心操作,并记得备份文件。

额外提示:使用DedeCMS的“栏目权限”功能

DedeCMS本身也带有一个简单的“会员才能访问”的栏目权限设置,但它功能比较基础,通常用于指定会员组才能访问,而不是“所有登录用户”。

路径: 【栏目】->【栏目管理】-> 选择一个栏目 -> 【修改】-> 【高级选项】->【浏览权限】

你可以在这里设置“仅指定会员组可见”,然后去【会员】->【会员管理】->【会员组管理】中,创建一个“普通会员”组,并将所有注册用户都归入这个组,这样也能实现类似效果,但不如上述两种方法直接和灵活。

选择最适合你需求的方法即可。

-- 展开阅读全文 --
头像
dede新模板广告图片怎么删?
« 上一篇 前天
精仿站酷织梦整站源码是否安全可靠?
下一篇 » 前天

相关文章

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

目录[+]