- 准备工作:了解核心文件和目录结构。
- 页面结构分析:以主流会员中心为例,拆解其功能模块。
- 模板文件创建:创建必要的 HTML 模板文件。
- 核心标签应用:详细讲解如何使用 Dede 标签调用会员数据、订单、文章等。
- 样式与交互:添加 CSS 和简单的 JavaScript,提升用户体验。
- 完整示例代码:提供一个关键页面的完整代码片段。
准备工作
在开始之前,你需要了解 DedeCMS 会员中心的核心文件位置:

- 模板目录:
/templets/,这是存放所有网站模板的地方,我们通常会在里面创建一个新文件夹,/templets/member/,来存放会员中心的专属模板。 - 会员控制器目录:
/member/,这是会员中心的核心程序文件所在目录,index.php(会员中心首页)、article_list.php(我的文章) 等。我们通常不直接修改这些 PHP 文件,而是通过模板文件和配置来控制页面内容。 - 会员默认模板目录:
/templets/default/,DedeCMS 自带的会员中心模板在这里,我们可以参考它的结构,但为了“高仿”,我们会自己创建一套全新的。
页面结构分析
一个主流的会员中心通常包含以下页面和模块:
-
首页 (
index.php):- 左侧导航栏:包含“我的订单”、“我的文章”、“我的收藏”、“我的消息”、“账户设置”等菜单。
- 区:
- 会员信息概览:头像、昵称、等级、积分等。
- 快捷入口:如“发布文章”、“修改密码”等。
- 数据统计:待处理订单数、未读消息数等。
- 最近动态:最近发布的文章、最近的订单等。
-
订单列表 (
order_list.php):- 订单状态筛选(全部、待付款、待发货、待收货、已完成)。
- 订单列表,每单包含:订单号、下单时间、订单金额、订单状态、操作按钮(查看详情、付款、确认收货等)。
-
我的文章 (
article_list.php):
(图片来源网络,侵删)- 文章状态筛选(全部、待审核、已发布、已退稿)。
- 文章列表,每篇包含:标题、发布时间、状态、操作按钮(编辑、删除)。
-
账户设置 (
profile.php):- 修改昵称、头像。
- 修改登录密码、支付密码。
- 绑定手机号、邮箱。
模板文件创建
在 /templets/ 目录下新建一个文件夹,my_member,我们为每个页面创建对应的模板文件:
/templets/my_member/index.htm(会员中心首页)/templets/my_member/order_list.htm(订单列表页)/templets/my_member/article_list.htm(文章列表页)/templets/my_member/head.htm(公共头部,比如带退出登录的导航栏)/templets/my_member/foot.htm(公共底部)
如何让 Dede 使用这些新模板?
你不需要修改 PHP 文件,DedeCMS 默认会去 /templets/member/ 目录下寻找模板,如果你把你的模板放在 /templets/my_member/,你需要修改 member 目录下的 PHP 文件,将模板路径指向你的新文件夹。
修改 /member/index.php 文件:
找到类似 include template('index'); 的代码,将其修改为:
include template('my_member/index');

注意:直接修改 PHP 文件不是最佳实践,但为了快速实现自定义模板,这是一个有效的方法,更高级的做法是创建自己的小插件来覆盖模板路径。
核心标签应用 (重点)
这是“高仿”的核心,DedeCMS 使用 {dede:标签名 属性='值'} 这样的语法来调用数据。
a. 公共部分 (head.htm 和 foot.htm)
head.htm 通常包含网站的 <head> 部分、顶部导航栏等。
head.htm 示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/} - 会员中心</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/templets/my_member/css/style.css"> <!-- 引入你的CSS -->
</head>
<body>
<div class="top-bar">
<div class="container">
<span>欢迎来到 {dede:global.cfg_webname/}!</span>
<ul class="user-menu">
<li><a href="/member/">会员中心</a></li>
<li><a href="{dede:global.cfg_memberurl/}/index_do.php?fmdo=login&dopost=exit&cktime=0">退出登录</a></li>
</ul>
</div>
</div>
<header class="main-header">
<div class="container">
<h1><a href="/">{dede:global.cfg_webname/}</a></h1>
<nav>
<!-- 网站主导航 -->
</nav>
</div>
</header>
<div class="main-container">
<div class="member-layout">
foot.htm 包含页脚信息。
b. 会员中心首页 (index.htm)
左侧导航栏:
使用循环标签 {dede:global name='mymenu'/} 可以自动调用会员中心的菜单,这个变量在 member/ 目录下的 PHP 文件中定义。
<div class="member-sidebar">
<h3>会员中心</h3>
<ul class="sidebar-menu">
{dede:global name='mymenu'/}
</ul>
</div>
mymenu 的输出通常是类似这样的 HTML:
<li><a href="/member/index.php" class="current">我的主页</a></li> <li><a href="/member/order_list.php">我的订单</a></li> <li><a href="/member/article_list.php">我的文章</a></li> <!-- ... -->
区:**
-
会员信息概览:
{dede:memberinfo}是核心标签,用于获取当前登录会员的信息。<div class="info-card"> <div class="avatar"> <img src="{dede:memberinfo function='GetMemberAvatar(@me,1,small)'/}" alt="头像"> </div> <div class="info"> <h2>{dede:memberinfo function='cn(@me)'/}</h2> <p>等级: {dede:memberinfo function='GetRankName(@me)'/}</p> <p>积分: {dede:memberinfo function='GetScores(@me)'/}</p> </div> </div>function='cn(@me)': 获取会员昵称。function='GetMemberAvatar(@me,1,small)': 获取会员头像。function='GetRankName(@me)': 获取会员等级名称。function='GetScores(@me)': 获取会员积分。
-
数据统计 (需要自定义SQL查询): Dede 默认可能没有提供这些数据,我们需要自定义一个函数来查询。
- 在
member/目录下的inc/inc_fun_funAdmin.php文件中,添加一个自定义函数,GetMemberStats()。 - 在首页模板中调用这个函数。
// 在 inc_fun_funAdmin.php 中添加 function GetMemberStats($mid) { $stats = array(); // 查询待付款订单数 $dopay = $GLOBALS['dsql']->GetOne("SELECT COUNT(*) AS num FROM `dede_member_order` WHERE mid='$mid' AND orderstatus='0'"); $stats['dopay'] = $dopay['num']; // 查询未读消息数 $nomsg = $GLOBALS['dsql']->GetOne("SELECT COUNT(*) AS num FROM `dede_member_msg` WHERE toid='$mid' AND hasview='0'"); $stats['nomsg'] = $nomsg['num']; // ... 其他统计 return $stats; }在模板中调用:
<div class="stats-box"> <a href="/member/order_list.php?status=0"> <span class="num">{dede:global name='stats'/}[dopay]</span> <span class="label">待付款</span> </a> <a href="/member/msg_list.php"> <span class="num">{dede:global name='stats'/}[nomsg]</span> <span class="label">未读消息</span> </a> </div>注意:在 PHP 文件中,你需要先调用这个函数并把结果赋值给
global $stats;,模板才能使用{dede:global name='stats'/}。
- 在
-
最近动态: 可以调用会员最近发布的文章或最近下的订单。
<div class="recent-activity"> <h3>最近发布的文章</h3> <ul> {dede:arclist row='5' titlelen='30' typeid='' channelid='-1'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span class="time">([field:pubdate function='MyDate("m-d", @me)'/])</span> </li> {/dede:arclist} </ul> </div>arclist是文章列表标签,channelid='-1'表示调用所有频道(包括普通文章、软件等)的文章。typeid=''表示不限制栏目。
样式与交互
创建一个 CSS 文件 /templets/my_member/css/style.css,为你的模板添加样式。
/* style.css */
.member-layout {
display: flex;
max-width: 1200px;
margin: 20px auto;
gap: 20px;
}
.member-sidebar {
width: 200px;
flex-shrink: 0;
}
.sidebar-menu {
list-style: none;
padding: 0;
}
.sidebar-menu li a {
display: block;
padding: 12px;
text-decoration: none;
color: #333;
border-bottom: 1px solid #eee;
}
.sidebar-menu li a.current {
background-color: #f0f0f0;
color: #007bff;
font-weight: bold;
}
.member-content {
flex-grow: 1;
}
.info-card {
display: flex;
align-items: center;
padding: 20px;
background-color: #f9f9f9;
border-radius: 8px;
margin-bottom: 20px;
}
.info-card .avatar img {
width: 80px;
height: 80px;
border-radius: 50%;
margin-right: 20px;
}
.stats-box {
display: flex;
gap: 20px;
margin-bottom: 20px;
}
.stats-box a {
flex: 1;
text-align: center;
padding: 20px;
background-color: #e9ecef;
border-radius: 8px;
text-decoration: none;
color: #333;
}
.stats-box .num {
display: block;
font-size: 24px;
font-weight: bold;
color: #007bff;
}
对于交互,比如订单状态的切换,可以在列表页使用简单的 JavaScript。
order_list.htm 中的 JS 示例:
<script>
function changeStatus(status) {
// 获取URL中的参数并更新
let url = new URL(window.location.href);
url.searchParams.set('status', status);
window.location.href = url.toString();
}
</script>
<!-- 在HTML中 -->
<div class="status-filter">
<button onclick="changeStatus('all')">全部</button>
<button onclick="changeStatus('0')">待付款</button>
<button onclick="changeStatus('1')">待发货</button>
</div>
<!-- 在PHP代码中(模板文件内)需要配合判断 -->
{dede:sql sql="SELECT * FROM `dede_member_order` WHERE mid=~`mid` AND orderstatus like '%$status%'"}
注意:这种 JS 交互只是前端层面的,后端 PHP 在处理
order_list.php时,也需要读取$_GET['status']参数来筛选数据。
完整示例代码:index.htm
这是一个整合了上述所有元素的 index.htm 文件。
{dede:include file="my_member/head.htm"/}
<div class="main-container">
<div class="member-layout">
<!-- 左侧导航 -->
<div class="member-sidebar">
<h3>会员中心</h3>
<ul class="sidebar-menu">
{dede:global name='mymenu'/}
</ul>
</div>
<!-- 右侧内容 -->
<div class="member-content">
<!-- 会员信息概览 -->
<div class="info-card">
<div class="avatar">
<img src="{dede:memberinfo function='GetMemberAvatar(@me,1,small)'/}" alt="头像">
</div>
<div class="info">
<h2>{dede:memberinfo function='cn(@me)'/}</h2>
<p>等级: {dede:memberinfo function='GetRankName(@me)'/}</p>
<p>积分: {dede:memberinfo function='GetScores(@me)'/}</p>
</div>
</div>
<!-- 数据统计 -->
<div class="stats-box">
<a href="/member/order_list.php?status=0">
<span class="num">{dede:global name='stats'/}[dopay]</span>
<span class="label">待付款</span>
</a>
<a href="/member/msg_list.php">
<span class="num">{dede:global name='stats'/}[nomsg]</span>
<span class="label">未读消息</span>
</a>
<a href="/member/article_list.php">
<span class="num">{dede:global name='stats'/}[myarticle]</span>
<span class="label">我的文章</span>
</a>
</div>
<!-- 最近动态 -->
<div class="recent-activity">
<h3>最近发布的文章</h3>
<ul>
{dede:arclist row='5' titlelen='30' typeid='' channelid='-1'}
<li>
<a href="[field:arcurl/]" target="_blank">[field:title/]</a>
<span class="time">([field:pubdate function='MyDate("Y-m-d", @me)'/])</span>
</li>
{/dede:arclist}
</ul>
</div>
</div>
</div>
</div>
{dede:include file="my_member/foot.htm"/}
高仿 DedeCMS 会员中心模板的关键在于:
- 规划结构:先在纸上或工具里画出你想要的会员中心布局。
- 创建模板文件:在
templets下建立新文件夹,并创建*.htm文件。 - 善用核心标签:
{dede:memberinfo}获取会员基本信息。{dede:global name='mymenu'}调用菜单。{dede:arclist}调用文章列表。{dede:sql}自定义查询,获取订单、消息等数据。
- 编写 CSS:让你的模板看起来美观、现代化。
- 处理逻辑:对于需要动态筛选的页面(如订单列表),要理解 PHP 如何接收参数,并用 SQL 进行数据查询,最后在模板中循环输出。
这个过程需要耐心和对 DedeCMS 模板引擎的熟悉,从模仿一个简单的页面开始,逐步扩展到所有功能模块,你就能成功打造出一个功能完善、界面美观的高仿会员中心。
