- 使用织梦自带的
member标签(推荐,最标准)这种方法利用织梦内置的会员系统标签,可以直接调用登录状态、登录框、退出链接等,最稳定,也最符合织梦的机制。
- 手动编写HTML + PHP代码(灵活,适合自定义)
这种方法可以让你完全控制HTML结构和样式,但需要自己处理登录逻辑和状态判断。
下面我将详细介绍这两种方法,并提供完整的代码示例。
使用织梦自带的member标签(推荐)
这是最标准、最简单的方法,织梦的member标签是一个功能强大的标签集合,可以处理会员相关的各种显示需求。
步骤1:确定要放置登录框的位置
顶部登录框会放在网站头部模板文件中,这个文件一般是:
/templets/你的默认模板文件夹/header.htm
打开这个文件,找到你想要放置登录框的位置,比如<div class="topbar">或者<div class="header-right">内部。
步骤2:添加member标签代码
将以下代码粘贴到你想显示登录框的位置。
{dede:memberphp}
<!-- 登录状态 -->
<div id="login-top">
{dede:if $cfg_ml->IsLogin()}
<!-- 如果已登录,显示欢迎信息和退出链接 -->
欢迎您,
<strong>[field=username/]</strong>
<a href="{dede:memberurl function='GetUrl(@me)'/}" target="_blank">会员中心</a>
<a href="javascript:;" onclick="JavaScript:if(confirm('确定要退出登录吗?')){window.location='{dede:global.cfg_cmspath/}/member/index_do.php?fmdo=login&dopost=exit'}">退出</a>
{else /}
<!-- 如果未登录,显示登录表单 -->
<form name="userlogin" action="{dede:global.cfg_memberurl/}/index_do.php" method="POST">
<input type="hidden" name="dopost" value="login" />
<input type="text" name="userid" placeholder="用户名" />
<input type="password" name="pwd" placeholder="密码" />
<input type="checkbox" name="keeptime" value="604800" />记住我
<button type="submit">登录</button>
<a href="{dede:global.cfg_memberurl/}/index.php?a=reg">注册</a>
<a href="{dede:global.cfg_memberurl/}/resetpassword.php">忘记密码?</a>
</form>
{/dede:if}
</div>
{/dede:memberphp}
代码解释:
{dede:memberphp}...{/dede:memberphp}:这是一个块级标签,用于包裹所有会员相关的逻辑和HTML,它会自动处理会员登录状态的判断。{dede:if $cfg_ml->IsLogin()}...{else /}...{/dede:if}:这是核心的条件判断语句。$cfg_ml->IsLogin():这是一个PHP函数,用于检查当前用户是否已登录,如果返回true,则显示if;否则显示else。
[field=username/]:会员信息标签,用于显示当前登录用户的用户名。{dede:memberurl function='GetUrl(@me)'}:生成会员中心的链接。<form ...>:登录表单。action="{dede:global.cfg_memberurl/}/index_do.php":表单提交地址,这是织梦处理登录的核心文件。name="dopost" value="login":告诉后台我们要执行的是“登录”操作。name="userid"和name="pwd":用户名和密码的输入框名称,不要修改。name="keeptime":记住登录状态的时长,单位是秒。
步骤3:添加CSS样式(可选)
为了让登录框看起来更美观,你可以在网站的CSS文件(如/templets/你的默认模板文件夹/style.css)中添加一些样式。
/* 顶部登录框样式示例 */
#login-top {
display: flex;
align-items: center;
font-size: 14px;
}
#login-top form {
display: flex;
align-items: center;
}
#login-top input[type="text"],
#login-top input[type="password"] {
padding: 5px 10px;
margin-right: 5px;
border: 1px solid #ccc;
border-radius: 3px;
}
#login-top button {
padding: 5px 15px;
background-color: #007bff;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
#login-top a {
margin-left: 10px;
color: #666;
text-decoration: none;
}
#login-top a:hover {
color: #007bff;
text-decoration: underline;
}
手动编写HTML + PHP代码(灵活)
如果你对PHP和HTML比较熟悉,并且想要完全自定义登录框的外观和结构,可以使用这种方法。
步骤1:在模板中添加HTML结构
同样,在header.htm文件中添加如下HTML结构。
<div id="my-custom-login">
<?php
// 引入会员类
// global $cfg_cmspath; 这行通常在全局中已定义,如果报错可以加上
require_once(DEDEMEMBER.'/config.php');
// 检查登录状态
if($cfg_ml->IsLogin()) {
// 已登录逻辑
?>
<span>欢迎您,<strong><?php echo $cfg_ml->M_UserName; ?></strong></span>
<a href="<?php echo $cfg_memberurl; ?>/index.php">会员中心</a>
<a href="javascript:;" onclick="JavaScript:if(confirm('确定要退出登录吗?')){window.location='<?php echo $cfg_memberurl; ?>/index_do.php?fmdo=login&dopost=exit'}">退出</a>
<?php
} else {
// 未登录逻辑
?>
<form name="userlogin" action="<?php echo $cfg_memberurl; ?>/index_do.php" method="POST">
<input type="hidden" name="dopost" value="login" />
<input type="text" name="userid" placeholder="用户名" />
<input type="password" name="pwd" placeholder="密码" />
<button type="submit">登录</button>
<a href="<?php echo $cfg_memberurl; ?>/index.php?a=reg">注册</a>
</form>
<?php
}
?>
</div>
代码解释:
require_once(DEDEMEMBER.'/config.php');:这是关键!必须引入织梦的会员配置文件,这样才能使用$cfg_ml等全局会员对象。if($cfg_ml->IsLogin()):与方法一中的判断逻辑完全相同。$cfg_ml->M_UserName:直接获取当前登录用户的用户名。<?php echo $cfg_memberurl; ?>:输出会员中心的URL,与方法一中的标签作用相同。
步骤2:添加CSS样式
与方法一类似,你也需要为自定义的#my-custom-login添加CSS样式来美化它。
总结与建议
| 特性 | 方法一 (member标签) | 方法二 (手动PHP) |
|---|---|---|
| 易用性 | 非常简单,只需复制粘贴标签。 | 需要一定的PHP和HTML基础。 |
| 稳定性 | 极高,是织梦官方推荐的方式,升级影响小。 | 依赖直接引入PHP文件,如果织梦结构变化可能有影响。 |
| 灵活性 | 较低,受限于标签的输出格式。 | 极高,可以完全控制HTML结构和PHP逻辑。 |
| 适用场景 | 绝大多数情况,特别是新手或快速建站。 | 需要高度定制化UI和交互的复杂项目。 |
对于绝大多数用户,我强烈推荐使用【方法一】,它足够强大、稳定且易于维护,只有在方法一无法满足你特定的自定义需求时,才考虑使用方法二。
