DedeCMS 默认没有提供像文章列表、文章内容那样独立的、可自由编辑的“会员登录模板”文件。

dedecms怎么没有会员登录模板
(图片来源网络,侵删)

但这并不意味着您无法修改会员登录的样式,DedeCMS的会员登录功能是通过一个函数调用的,这个函数会读取系统内置的一套HTML结构和CSS样式,要修改它,我们需要找到这个函数,然后通过覆盖或修改其样式来实现。

下面我为您详细解释原因,并提供几种修改会员登录样式的标准方法。


为什么没有独立的模板文件?

DedeCMS的设计理念是,很多功能模块(如搜索、友情链接、会员登录等)都是作为“组件”存在的,它们可以在任何页面(首页、列表页、内容页等)通过调用特定函数来插入,这样做的好处是灵活,可以随处调用;坏处就是不像文章模块那样有固定的、独立的模板文件。

会员登录功能的核心函数是 GetMemberLogin(),它位于 /include/extend.func.php 文件中(较新版本)或者直接在某个文件里定义,当你在模板里使用 {dede:php} GetMemberLogin(); {/dede:php} 或类似标签时,DedeCMS就会执行这个函数,并输出一段预设好的HTML代码。

dedecms怎么没有会员登录模板
(图片来源网络,侵删)

如何修改会员登录的样式?(三种方法)

覆盖默认样式(最推荐、最安全)

这是最简单也是最常用的方法,我们不需要去动DedeCMS的核心文件,只需要在您的模板CSS文件中添加新的样式,覆盖掉默认的样式即可。

操作步骤:

  1. 找到默认HTML结构 您需要知道GetMemberLogin()函数输出了什么样的HTML代码,您可以在网站前台任意一个调用了会员登录的地方,使用浏览器“审查元素”功能,查看登录框的HTML结构。 它的结构大概是这样的(具体class名可能因版本略有不同):

    <div class="dl">
        <div class="dl-menu">
            <form name="userlogin" action="{dede:global.cfg_memberurl/}/index_do.php" method="POST">
                <input type="hidden" name="dopost" value="login" />
                <input type="hidden" name="gourl" value="/plus/heightsearch.php" />
                <div class="fb"><strong>用户名:</strong>
                    <input type="text" name="userid" size="20" class="ipt-txt" />
                </div>
                <div class="fb"><strong>密码:</strong>
                    <input type="password" name="pwd" size="20" class="ipt-txt" />
                </div>
                <div class="fb"><strong>安全认证:</strong>
                    <input type="text" name="vdcode" size="8" class="ipt-txt" />
                    <img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" width="60" height="24" style="cursor:pointer" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" title="看不清?点击换一张" />
                </div>
                <div class="fb">
                    <button type="submit" class="btn-1">登录</button>
                    <a href="{dede:global.cfg_memberurl/}/index.php" target="_blank">注册</a> | <a href="{dede:global.cfg_memberurl/}/resetpassword.php">忘记密码?</a>
                </div>
            </form>
        </div>
    </div>
  2. 在您的CSS文件中添加自定义样式 打开您模板目录下的CSS文件(/templets/您的模板名/style.css),然后针对上面的HTML结构,添加您自己的CSS样式来覆盖默认样式。

    dedecms怎么没有会员登录模板
    (图片来源网络,侵删)

    示例:

    /* 覆盖默认的登录框容器样式 */
    .dl {
        width: 300px; /* 调整宽度 */
        border: 1px solid #ddd;
        border-radius: 5px;
        padding: 15px;
        background-color: #f9f9f9;
        box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    }
    /* 覆盖输入框样式 */
    .dl .fb input.ipt-txt {
        width: 100%;
        padding: 8px;
        border: 1px solid #ccc;
        border-radius: 3px;
        box-sizing: border-box; /* 确保padding不会增加宽度 */
    }
    /* 覆盖按钮样式 */
    .dl .fb .btn-1 {
        background-color: #007bff;
        color: white;
        border: none;
        padding: 8px 15px;
        border-radius: 3px;
        cursor: pointer;
    }
    .dl .fb .btn-1:hover {
        background-color: #0056b3;
    }
    /* 覆盖验证码图片样式 */
    .dl .fb img {
        vertical-align: middle;
        margin-left: 5px;
    }

优点:

  • 安全,不修改核心文件,升级DedeCMS时不会被覆盖。
  • 简单,只需要懂一些CSS即可。

创建自定义函数和模板(最灵活、最专业)

如果您想完全掌控会员登录的HTML结构,比如想把它做成一个漂亮的弹窗或者一个独立的模块,可以使用这个方法。

操作步骤:

  1. 创建新的模板文件 在您的模板目录下(/templets/您的模板名/),创建一个新的HTML文件,member_login_custom.htm,在这个文件里,您可以随心所欲地编写登录框的HTML结构,并使用DedeCMS的标签。

    member_login_custom.htm 示例:

    <div class="my-custom-login-box">
        <h3>会员登录</h3>
        <form action="{dede:global.cfg_memberurl/}/index_do.php" method="POST">
            <input type="hidden" name="dopost" value="login" />
            <div class="form-group">
                <label for="userid">用户名</label>
                <input type="text" name="userid" id="userid" class="form-control" placeholder="请输入用户名">
            </div>
            <div class="form-group">
                <label for="pwd">密码</label>
                <input type="password" name="pwd" id="pwd" class="form-control" placeholder="请输入密码">
            </div>
            <div class="form-group">
                <label for="vdcode">验证码</label>
                <div class="d-flex">
                    <input type="text" name="vdcode" id="vdcode" class="form-control" placeholder="验证码">
                    <img src="{dede:global.cfg_cmspath/}/include/vdimgck.php" onclick="this.src='{dede:global.cfg_cmspath/}/include/vdimgck.php?'+Math.random();" title="点击刷新验证码">
                </div>
            </div>
            <button type="submit" class="btn btn-primary btn-block">登 录</button>
            <div class="text-center mt-2">
                <a href="{dede:global.cfg_memberurl/}/index.php">立即注册</a> | <a href="{dede:global.cfg_memberurl/}/resetpassword.php">忘记密码?</a>
            </div>
        </form>
    </div>
  2. 创建自定义函数 打开 /include/extend.func.php 文件(如果不存在就自己创建一个),在文件末尾添加一个新的PHP函数,用来读取并返回您刚刚创建的模板内容。

    extend.func.php 添加代码:

    /**
     * 获取自定义的会员登录模板
     * @return string 模板HTML内容
     */
    function GetCustomMemberLogin()
    {
        global $cfg_templets_dir;
        $loginTpl = $cfg_templets_dir . '/您的模板名/member_login_custom.htm';
        // 检查模板文件是否存在
        if (file_exists($loginTpl)) {
            // 读取模板文件内容
            $html = file_get_contents($loginTpl);
            // 可以在这里进行一些标签处理,但通常直接返回即可
            return $html;
        } else {
            // 如果自定义模板不存在,则返回默认的登录框,避免页面出错
            return GetMemberLogin();
        }
    }
  3. 在模板中调用新函数 您可以在任何需要显示登录框的地方,使用下面的标签来调用您的自定义登录框:

    {dede:php}
        echo GetCustomMemberLogin();
    {/dede:php}

优点:

  • 完全自由控制HTML结构和样式。
  • 代码和模板分离,非常清晰。

缺点:

  • 操作稍复杂,需要修改PHP文件。
  • 升级模板时需要注意这个自定义函数。

直接修改核心函数(不推荐,仅适用于高级用户)

这种方法直接修改GetMemberLogin()函数所在的文件,将其输出的HTML代码直接改成您想要的。但强烈不推荐,因为一旦修改,在DedeCMS升级时,您的修改会被覆盖,导致所有改动丢失。

如果您确实想这么做,可以去查找GetMemberLogin()函数的定义(可能在/include/funcs/album.func.php/include/extend.func.php等文件中),然后直接修改里面的echoreturn语句中的HTML字符串。


方法 优点 缺点 推荐度
覆盖CSS 简单、安全、不影响升级 灵活性稍差,受限于原始HTML结构 ★★★★★ (首选)
自定义函数和模板 灵活、专业、完全可控 操作复杂,需要修改PHP文件 ★★★★☆ (适合深度定制)
修改核心函数 直接、见效快 危险!升级即失效,容易出错 ★☆☆☆☆ (绝对不推荐)

对于绝大多数用户来说,使用方法一(覆盖CSS样式) 是解决“DedeCMS没有会员登录模板”这个问题的最佳途径,它既简单又安全,足以满足大部分的样式修改需求。