织梦会员模板的调用核心在于使用 全局 {dede:} 和 全局变量 $GLOBALS,与前台内容页模板的标签略有不同,会员模板的调用更侧重于会员自身的数据、会员中心的相关信息以及与会员交互的功能。
下面我将从基础到进阶,分模块详细介绍各种调用方法。
基础准备:理解会员模板的执行环境
在开始调用之前,你需要明白:
- 执行环境:会员模板是在用户登录后,在
/member/目录下执行的,织梦系统已经知道当前是哪个会员在访问。 - 核心变量:当前登录会员的所有信息都存储在全局变量
$GLOBALS['cfg_member']中,你可以通过print_r($GLOBALS['cfg_member']);来查看这个数组里具体有哪些数据,这对于调试非常有帮助。 - 核心标签:会员模板主要使用
{dede:}全局标签,而不是像{dede:arclist}这样的列表标签,很多标签需要配合function='xxx'来使用特定的会员功能函数。
常用调用详解
调用当前登录会员的基本信息
这是最常用、最基础的功能,用于在会员中心首页或任何页面显示欢迎信息和会员资料。
示例:在会员中心首页显示会员昵称、头像和等级
<div class="member-info">
<img src="{dede:field.userid function='GetMemberAvatar(@me)'/}" alt="会员头像" class="avatar">
<h3>欢迎您,<strong>{dede:field.username/}</strong>!</h3>
<p>您的会员等级是:<span>{dede:field.mtype function='GetMemberType(@me)'/}</span></p>
<p>注册时间:{dede:field.regdate function='MyDate(Y-m-d, @me)'/}</p>
</div>
标签解析:
{dede:field.userid function='GetMemberAvatar(@me)'/}:field.userid: 获取当前会员的用户ID。function='GetMemberAvatar(@me)': 调用GetMemberAvatar函数,并将用户ID@me作为参数传入,函数会返回该会员的头像路径,如果会员没有上传头像,通常会返回默认头像。
{dede:field.username/}: 直接获取当前会员的用户名。{dede:field.mtype function='GetMemberType(@me)'/}:field.mtype: 获取会员类型ID(如:个人、企业等)。function='GetMemberType(@me)': 调用GetMemberType函数,将类型ID传入,返回可读的会员类型名称(如:个人会员、企业会员)。
{dede:field.regdate function='MyDate(Y-m-d, @me)'/}:field.regdate: 获取注册时间(时间戳格式)。function='MyDate(Y-m-d, @me)': 调用织梦的日期格式化函数MyDate,将时间戳@me格式化为年-月-日。
其他常用会员信息字段:
{dede:field.sex/}: 性别{dede:field.email/}: 邮箱{dede:field.scores/}: 积分{dede:field.money/}: 金额{dede:field.face/}: 头像路径(与GetMemberAvatar不同,这个是直接存储路径的,可能需要处理)
调用会员发布的文档/信息
在会员中心,会员需要查看自己发布过的文章、商品等信息。
示例:在会员中心调用会员自己发布的文档列表
<table border="1" cellpadding="5" cellspacing="0">
<thead>
<tr>
<th>标题</th>
<th>状态</th>
<th>发布时间</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{dede:arclist row='10' titlelen='50' orderby='pubdate'}
<tr>
<td><a href="[field:arcurl/]" target="_blank">[field:title/]</a></td>
<td>[field:arctypeid function="GetMemberArticleStatus(@me)"/]</td>
<td>[field:pubdate function="MyDate(Y-m-d H:i, @me)"/]</td>
<td>
<a href="/member/edit.php?aid=[field:id/]">编辑</a> |
<a href="/member/article_do.php?aid=[field:id]&dopost=del">删除</a>
</td>
</tr>
{/dede:arclist}
</tbody>
</table>
标签解析:
{dede:arclist}标签在会员模板中同样有效,但会自动加上mid = '$GLOBALS['cfg_member']['id']'的条件,即默认只显示当前会员发布的内容。row='10': 显示10条记录,len='50'`: 标题长度限制为50个字符。orderby='pubdate': 按发布时间倒序排列。[field:arcurl/]: 文档的链接地址。[field:title/]: 文档标题。[field:arctypeid function="GetMemberArticleStatus(@me)"/]:- 这是一个自定义函数示例,用于显示文档状态(如:已审核、未审核、已退稿等),你需要自己在
include/extend.func.php文件中编写GetMemberArticleStatus函数来实现这个功能。
- 这是一个自定义函数示例,用于显示文档状态(如:已审核、未审核、已退稿等),你需要自己在
/member/edit.php?aid=[field:id/]: 编辑文档的链接。/member/article_do.php?aid=[field:id]&dopost=del: 删除文档的链接。
调用会员订单列表
对于电商或有支付功能的网站,订单列表是会员中心的核心功能。
示例:调用会员的订单列表
<h3>我的订单</h3>
<ul>
{dede:myarchivetitle orderway='desc' row='5'}
<li>
订单号:<strong>[field:tid/]</strong> -
金额:<strong>¥[field:price/]</strong> -
状态:[field:state function="GetOrderState(@me)"/] -
下单时间:[field:senddate function="MyDate(Y-m-d H:i, @me)"/]
</li>
{/dede:myarchivetitle}
</ul>
标签解析:
{dede:myarchivetitle}: 这是专门用于调用会员自定义列表(如订单、留言等)的标签。orderway='desc': 按降序排列(最新的在前)。row='5': 显示5条记录。[field:tid/]: 订单号。[field:price/]: 订单金额。[field:state function="GetOrderState(@me)"/]: 同样,需要你自定义一个GetOrderState函数来将订单状态码(如:1, 2, 3)转换为“待付款”、“已发货”、“已完成”等文字。[field:senddate/]: 下单时间。
调用会员留言/评论列表
展示会员自己发布的留言或评论。
示例:调用会员的留言列表
<h3>我的留言</h3>
{dede:feedback row='10' titlelen='30'}
<div class="feedback-item">
<p><strong>[field:username/]</strong> 于 [field:msgtime function="MyDate(Y-m-d H:i, @me)"] 留言:</p>
<p>[field:msg/]</p>
<p>管理员回复:[field:ischeck == '1' ? '<span class="reply">[field:reply/]</span>' : '<span style="color:red;">待审核</span>']</p>
</div>
{/dede:feedback}
标签解析:
{dede:feedback}: 调用反馈(留言/评论)列表。row='10': 显示10条,len='30'`: 标题长度(如果留言有标题的话)。[field:msgtime/]: 留言时间。[field:msg/]: 留言内容。[field:reply/]: 管理员回复内容。[field:ischeck == '1' ? ... : ...]: 这是一个三元运算符,用于判断留言是否被审核。ischeck == 1表示已审核,显示回复内容;否则显示“待审核”。
调用会员收藏/下载记录
示例:调用会员收藏的文章列表
<h3>我的收藏</h3>
{dede:archives row='10' titlelen='50'}
<p><a href="[field:arcurl/]" target="_blank">[field:title/]</a> - 收藏于 [field:senddate function="MyDate(Y-m-d, @me)"]</p>
{/dede:archives}
标签解析:
{dede:archives}: 调用会员相关的文档列表,包括收藏、下载等。- 它会自动根据当前会员ID筛选出被收藏的文档。
进阶技巧与注意事项
自定义函数的使用
在上面的例子中多次提到了自定义函数(如 GetMemberAvatar, GetOrderState),这是织梦模板强大的扩展能力。
如何添加自定义函数?
- 打开你的织梦网站根目录下的
include/extend.func.php文件。 - 在文件末尾添加你的PHP函数。
- 确保这个文件存在并且可写。
示例:编写一个 GetOrderState 函数
// 在 include/extend.func.php 中添加以下代码
if (!function_exists('GetOrderState')) {
function GetOrderState($state)
{
$stateArray = array(
'1' => '待付款',
'2' => '待发货',
'3' => '已发货',
'4' => '已完成',
'5' => '已取消'
);
return isset($stateArray[$state]) ? $stateArray[$state] : '未知状态';
}
}
添加后,你就可以在模板中使用 {dede:field:state function="GetOrderState(@me)"/} 了。
条件判断 {dede:if}
在会员模板中,经常需要根据会员的状态进行判断。
示例:根据会员积分显示不同等级的图标
{dede:if field scores > 1000}
<img src="/images/vip_gold.png" alt="黄金会员">
{else if field scores > 500}
<img src="/images/vip_silver.png" alt="白银会员">
{else}
<img src="/images/vip_copper.png" alt="青铜会员">
{/dede:if}
循环输出 {dede:loop}
{dede:loop} 用于循环一个固定的数组,在会员模板中不常用,但如果你需要从某个特定的数据源(如配置项)读取数据并循环展示,它会很有用。
调用系统配置项
有时需要调用网站的全局配置,如网站名称、网站版权信息等。
网站名称:{dede:global.cfg_webname/}
网站版权:{dede:global.cfg_powerby/}
安全性考虑
- XSS过滤:织梦默认会对输出内容进行一定的过滤,但对于用户提交的内容(如留言、评论),最好在模板输出时也加上过滤。
[field:msg function='htmlspecialchars(@me)'/]:将HTML特殊字符转义,防止XSS攻击。
- 权限验证:确保会员只能操作自己的数据,织梦的底层PHP文件(如
/member/目录下的文件)已经做了大部分权限验证,但在模板层面也要注意,不要暴露敏感操作链接。
调试技巧
如果你不确定某个标签或变量怎么用,最直接的方法就是打印输出。
-
打印会员信息: 在模板的任意位置添加以下代码,然后刷新页面查看源码,就能看到当前会员的所有信息。
<pre> <?php print_r($GLOBALS['cfg_member']); ?> </pre>
-
打印单个字段: 如果你不确定
field.sex的值是什么,可以直接输出它。您的性别是:{dede:field.sex/}如果看不到,可能是为空。
调用织梦会员模板的关键在于:
- 记住核心变量:
$GLOBALS['cfg_member']存储了所有会员信息。 - 善用
{dede:field}:通过function属性调用系统或自定义函数来处理数据。 - 掌握常用列表标签:
{dede:arclist},{dede:myarchivetitle},{dede:feedback}等,它们会自动过滤当前会员的数据。 - 学会扩展:通过
extend.func.php编写自定义函数,实现模板逻辑的复杂化。 - 勤于调试:使用
print_r()是排查问题的最有效方法。
希望这份详细的指南能帮助你熟练掌握织梦会员模板的调用!
