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

但这并不意味着您无法修改会员登录的样式,DedeCMS的会员登录功能是通过一个函数调用的,这个函数会读取系统内置的一套HTML结构和CSS样式,要修改它,我们需要找到这个函数,然后通过覆盖或修改其样式来实现。
下面我为您详细解释原因,并提供几种修改会员登录样式的标准方法。
为什么没有独立的模板文件?
DedeCMS的设计理念是,很多功能模块(如搜索、友情链接、会员登录等)都是作为“组件”存在的,它们可以在任何页面(首页、列表页、内容页等)通过调用特定函数来插入,这样做的好处是灵活,可以随处调用;坏处就是不像文章模块那样有固定的、独立的模板文件。
会员登录功能的核心函数是 GetMemberLogin(),它位于 /include/extend.func.php 文件中(较新版本)或者直接在某个文件里定义,当你在模板里使用 {dede:php} GetMemberLogin(); {/dede:php} 或类似标签时,DedeCMS就会执行这个函数,并输出一段预设好的HTML代码。

如何修改会员登录的样式?(三种方法)
覆盖默认样式(最推荐、最安全)
这是最简单也是最常用的方法,我们不需要去动DedeCMS的核心文件,只需要在您的模板CSS文件中添加新的样式,覆盖掉默认的样式即可。
操作步骤:
-
找到默认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> -
在您的CSS文件中添加自定义样式 打开您模板目录下的CSS文件(
/templets/您的模板名/style.css),然后针对上面的HTML结构,添加您自己的CSS样式来覆盖默认样式。
(图片来源网络,侵删)示例:
/* 覆盖默认的登录框容器样式 */ .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结构,比如想把它做成一个漂亮的弹窗或者一个独立的模块,可以使用这个方法。
操作步骤:
-
创建新的模板文件 在您的模板目录下(
/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> -
创建自定义函数 打开
/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(); } } -
在模板中调用新函数 您可以在任何需要显示登录框的地方,使用下面的标签来调用您的自定义登录框:
{dede:php} echo GetCustomMemberLogin(); {/dede:php}
优点:
- 完全自由控制HTML结构和样式。
- 代码和模板分离,非常清晰。
缺点:
- 操作稍复杂,需要修改PHP文件。
- 升级模板时需要注意这个自定义函数。
直接修改核心函数(不推荐,仅适用于高级用户)
这种方法直接修改GetMemberLogin()函数所在的文件,将其输出的HTML代码直接改成您想要的。但强烈不推荐,因为一旦修改,在DedeCMS升级时,您的修改会被覆盖,导致所有改动丢失。
如果您确实想这么做,可以去查找GetMemberLogin()函数的定义(可能在/include/funcs/album.func.php或/include/extend.func.php等文件中),然后直接修改里面的echo或return语句中的HTML字符串。
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 覆盖CSS | 简单、安全、不影响升级 | 灵活性稍差,受限于原始HTML结构 | ★★★★★ (首选) |
| 自定义函数和模板 | 灵活、专业、完全可控 | 操作复杂,需要修改PHP文件 | ★★★★☆ (适合深度定制) |
| 修改核心函数 | 直接、见效快 | 危险!升级即失效,容易出错 | ★☆☆☆☆ (绝对不推荐) |
对于绝大多数用户来说,使用方法一(覆盖CSS样式) 是解决“DedeCMS没有会员登录模板”这个问题的最佳途径,它既简单又安全,足以满足大部分的样式修改需求。
