织梦会员中心是一个独立的系统,它有自己的模板引擎和目录结构,理解这一点是关键,与主站调用 {dede:} 标签不同,会员中心主要使用 PHP原生代码 和 自定义函数 来调用数据。

会员中心模板文件结构
你需要知道会员中心模板文件在哪里,默认情况下,它们位于:
/templets/你的会员目录/
这里的“你的会员目录”是在后台“系统” -> “系统基本参数” -> “会员设置”中设置的,通常是 member/。
在这个目录下,你会看到多个子文件夹,每个文件夹对应一个会员中心的功能模块:

- index.php / index.htm: 会员中心首页模板。
- space/: 个人空间模板。
- profile/: 资料修改模板。
- article/: 发布、管理文章的模板。
- myfriend/: 好友管理模板。
- pm/: 站内信模板。
- shop/: 商城相关模板(如果商城是独立模块)。
- favorite/: 收藏夹模板。
- ...等等。
核心思想:你要修改哪个页面,就去对应的文件夹里找 .htm 模板文件进行编辑。
主要调用方式
会员中心模板主要使用以下几种方式来调用数据:
使用PHP原生代码
这是最常用、最核心的方式,因为会员中心模板最终会被PHP文件解析,所以你可以在 .htm 文件中直接写PHP代码。
示例:在会员首页调用当前会员的用户名和头像

假设你的会员首页模板是 index.htm,你可以在模板的任意位置添加如下代码:
<div class="user-info">
<p>欢迎您,<strong><?php echo $cfg_ml->M_UserName; ?></strong>!</p>
<img src="<?php echo $cfg_ml->M_MbType; ?>" alt="用户头像">
</div>
代码解析:
$cfg_ml: 这是织梦会员中心的核心对象,代表当前登录的会员实例。$cfg_ml->M_UserName: 获取当前会员的用户名。$cfg_ml->M_MbType: 获取会员的头像地址(这取决于你的会员模型设置,通常存储的是头像图片的路径)。
其他常用 $cfg_ml 属性:
M_ID: 会员IDM_Money: 会员余额M_Scores: 会员积分M_Rank: 会员等级M_Email: 会员邮箱M_Imode: 会员模式 (如个人、企业)
调用会员发布的文章/信息
会员中心最常用的功能之一就是展示会员自己发布的内容,这通常需要结合PHP循环和SQL查询。
示例:在会员首页展示该会员发布的最新5篇文章
<div class="my-articles">
<h3>我发布的文章</h3>
<ul>
<?php
$dsql->SetQuery("SELECT * FROM `#@__archives` WHERE mid='{$cfg_ml->M_ID}' AND arcrank=0 ORDER BY pubdate DESC LIMIT 0, 5");
$dsql->Execute();
while($row = $dsql->GetObject())
{
?>
<li>
<a href="<?php echo GetOneArchive($row->id); ?>"><?php echo $row->title; ?></a>
<span><?php echo MyDate('Y-m-d', $row->pubdate); ?></span>
</li>
<?php
}
?>
</ul>
</div>
代码解析:
$dsql: 织梦的数据库操作对象,用于执行SQL查询。SetQuery(): 设置要执行的SQL语句。#@__archives: 这是织梦表前缀dede_的别名,写代码时用这个,系统会自动替换。mid='{$cfg_ml->M_ID}': 关键条件,只查询当前会员发布的内容。arcrank=0: 只查询已通过审核的文章(arcrank=-1为待审核,-2为回收站)。ORDER BY pubdate DESC LIMIT 0, 5: 按发布时间倒序排列,只取前5条。
Execute(): 执行查询。while($row = $dsql->GetObject()): 循环遍历查询结果,$row是一个对象,包含了当前行的数据。$row->id: 文章ID。$row->title: 文章标题。$row->pubdate: 文章发布时间戳。GetOneArchive($row->id): 这是一个织梦内置函数,根据文章ID获取其正确的URL链接。MyDate(): 织梦日期格式化函数。
调用系统全局标签
虽然会员中心以PHP为主,但在某些场景下,你也可以使用主站的 {dede:} 标签,但需要通过 lib_main.php 中的相关函数来解析。
示例:调用会员中心的导航菜单
会员中心的导航菜单通常是通过一个标签来生成的,这个标签在 templets/plus/menu.htm 文件中定义。
你可以在你的模板中这样引入:
{dede:include filename="menu.htm"/}
这个 menu.htm 文件内部可能也使用了PHP代码来动态生成菜单项。
实战案例:修改会员首页 (index.htm)
假设你想做一个简单的会员首页,包含以下模块:
- 欢迎信息和用户头像。
- 会员账户概览(余额、积分)。
- 最近发布的3篇文章。
- 最近收藏的5个栏目。
模板代码示例 (index.htm):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">会员中心 - {dede:global.cfg_webname/}</title>
<link rel="stylesheet" href="/templets/member/style.css">
</head>
<body>
{dede:include filename="head.htm"/} <!-- 通常包含会员中心的头部和导航 -->
<div class="main">
<div class="left">
<!-- 欢迎信息和用户头像 -->
<div class="user-profile">
<img src="<?php echo $cfg_ml->M_MbType; ?>" alt="头像" class="avatar">
<div class="info">
<h2>欢迎回来,<strong><?php echo $cfg_ml->M_UserName; ?></strong>!</h2>
<p>等级:<?php echo $cfg_ml->M_Rank; ?></p>
</div>
</div>
<!-- 会员账户概览 -->
<div class="account-overview">
<h3>账户概览</h3>
<ul>
<li>余额:<strong><?php echo $cfg_ml->M_Money; ?></strong> 元</li>
<li>积分:<strong><?php echo $cfg_ml->M_Scores; ?></strong> 分</li>
</ul>
</div>
<!-- 最近发布的文章 -->
<div class="recent-articles">
<h3>最近发布的文章</h3>
<?php
$dsql->SetQuery("SELECT id, title, pubdate FROM `#@__archives` WHERE mid='{$cfg_ml->M_ID}' AND arcrank=0 ORDER BY pubdate DESC LIMIT 0, 3");
$dsql->Execute();
if($dsql->GetTotalRow() > 0) {
?>
<ul>
<?php while($row = $dsql->GetObject()){ ?>
<li>
<a href="<?php echo GetOneArchive($row->id); ?>"><?php echo $row->title; ?></a>
<span><?php echo MyDate('m-d', $row->pubdate); ?></span>
</li>
<?php } ?>
</ul>
<?php } else { ?>
<p>您还没有发布过文章。</p>
<?php } ?>
</div>
</div>
<div class="right">
<!-- 最近收藏的栏目 -->
<div class="recent-favorites">
<h3>我的收藏</h3>
<?php
// 调用收藏夹的标签,需要用到特定的函数
// 这是一个更复杂的例子,展示了如何调用非标准数据表
$dsql->SetQuery("SELECT * FROM `#@__member_stow` WHERE mid='{$cfg_ml->M_ID}' ORDER BY addtime DESC LIMIT 0, 5");
$dsql->Execute();
if($dsql->GetTotalRow() > 0) {
?>
<ul>
<?php while($row = $dsql->GetObject()){ ?>
<li>
<a href="<?php echo $row->url; ?>" target="_blank"><?php echo $row->title; ?></a>
</li>
<?php } ?>
</ul>
<?php } else { ?>
<p>您还没有收藏任何内容。</p>
<?php } ?>
</div>
</div>
</div>
{dede:include filename="foot.htm"/} <!-- 页脚 -->
</body>
</html>
重要技巧与注意事项
- 文件命名规范:会员中心的模板文件通常是
index.htm,list.htm,info.htm等,后台的PHP文件(如index.php)会负责获取数据并包含对应的.htm模板文件。 - 路径问题:模板中的CSS、JS、图片等资源路径,最好使用绝对路径(如
/templets/member/style.css)或者织梦的全局变量{dede:global.cfg_templets_dir/},避免路径错乱。 - 安全第一:在会员中心,用户输入是不可信的,如果涉及到表单提交或用户生成内容的展示,一定要做好数据过滤和转义,防止XSS等攻击,虽然
$dsql->GetObject()已经做了基本的防护,但养成好习惯总是对的。 - 调试技巧:如果代码不生效,可以尝试在PHP代码块中
echo $cfg_ml->M_ID;来确认变量是否正确获取,也可以开启PHP错误报告来查看具体错误。 - 查看源码:学习织梦默认会员中心模板是最好的方法,直接去
templets/member/目录下,打开默认的index.htm等文件,看看官方是如何实现的,然后模仿和修改。
| 需求 | 推荐方法 | 示例 |
|---|---|---|
| 获取当前会员信息 | 使用 $cfg_ml 对象 |
<?php echo $cfg_ml->M_UserName; ?> |
| 调用会员发布的文章/商品 | 使用 $dsql 执行SQL查询 |
SELECT ... FROM#@__archivesWHERE mid='{$cfg_ml->M_ID}' |
| 调用会员收藏/好友等 | 使用 $dsql 查询对应的数据表 |
SELECT ... FROM#@__member_stowWHERE mid='{$cfg_ml->M_ID}' |
| 调用系统固定模块(如菜单) | 使用 {dede:include} 或特定标签 |
{dede:include filename="menu.htm"/} |
| 格式化日期/获取链接 | 使用织梦内置函数 | MyDate(), GetOneArchive() |
掌握了PHP原生代码和SQL查询在会员中心模板中的应用,你就可以随心所欲地定制任何会员中心页面了。
