- 获取会员信息:通过
GetOneMember或GetMemberList等函数获取会员的基本数据和自定义模型数据。 - 调用并显示模型字段:使用
GetFieldValue函数从获取到的会员数据中,读取并显示你在后台为会员模型添加的自定义字段。
下面我将通过详细的步骤和代码示例,为你讲解如何实现。
第一步:理解会员模型的结构
在 DedeCMS 中,会员信息存储在两个主要地方:
dede_member表:存储会员的基本信息,如用户名 (userid)、密码 (pwd)、邮箱 (email)、积分 (scores) 等。dede_member_model和dede_mtype表:定义了会员模型的“结构”,即有哪些自定义字段。dede_member_model_field表:定义了具体的字段,如字段名、字段类型(文本、多行文本、单选、多选等)、是否必填等。dede_member_tpl和dede_member_full表:存储会员的完整信息,包括你在自定义模型中填写的所有数据。dede_member_full表中的字段名与dede_member_model_field表中的field字段名一一对应。
关键点:要调用自定义字段,你必须去 dede_member_model_field 表里找到你想要的字段的 field 名称(my_shengao, my_xingqu 等)。
第二步:调用单个会员的自定义模型字段
这是最常用的情况,比如在会员个人主页、文章作者信息栏等场景。
场景示例:在文章页显示作者的“个人简介”和“所在城市”
假设你在会员模型中添加了两个字段:
- 字段名:
jianjie(字段别名:个人简介) - 字段名:
suozaidicheng(字段别名:所在城市)
实现代码:
{dede:arclist row='1' titlelen='50'}
<!-- 1. 获取当前文章的作者ID -->
{dede:field.userid/}
<!-- 2. 使用PHP代码块获取会员信息并调用自定义字段 -->
[field:php]
// 获取当前文章的作者ID
$member_id = $fields['userid'];
// 如果存在作者ID
if($member_id) {
// 引入会员操作类文件(如果未在全局引入)
// require_once(DEDEINC.'/membermodel.cls.php');
// 实例化会员模型类
$member = new MemberHandler();
// 根据会员ID获取会员的完整信息(包括自定义模型数据)
$member_info = $member->GetOneMember($member_id);
// 检查是否成功获取到信息
if(is_array($member_info)) {
// 调用并显示自定义字段 'jianjie' (个人简介)
// 使用 @ 符号可以避免字段为空时产生警告
$jianjie = $member->GetFieldValue($member_info, 'jianjie');
if($jianjie) {
echo "<p>个人简介:{$jianjie}</p>";
}
// 调用并显示自定义字段 'suozaidicheng' (所在城市)
$city = $member->GetFieldValue($member_info, 'suozaidicheng');
if($city) {
echo "<p>所在城市:{$city}</p>";
}
}
}
[/field:php]
{/dede:arclist}
代码解析:
{dede:arclist ...}:我们通过arclist标签来获取文章信息,并利用它的{dede:field.userid/}来得到作者的会员ID。[field:php]...[/field:php]:这是 DedeCMS 的 PHP 代码块,我们在这里编写核心逻辑。$member = new MemberHandler();:创建一个MemberHandler对象,这是处理会员数据的专用类。$member_info = $member->GetOneMember($member_id);:调用GetOneMember方法,传入会员ID,获取该会员的所有信息,包括基本资料和你在后台自定义模型里填写的所有数据,这个信息被存储在$member_info这个数组里。$member->GetFieldValue($member_info, 'jianjie');:这是最关键的一步,它从$member_info数组中,根据你指定的字段名(这里是'jianjie')提取出对应的值。if($jianjie):做一个简单的判断,如果字段不为空,才进行输出,避免显示空白。
第三步:调用会员列表及其自定义字段
如果你想在一个页面上列出多个会员,并显示他们的部分自定义信息,可以使用 GetMemberList 函数。
场景示例:显示所有注册会员的列表,包含“昵称”和“个人简介”
实现代码:
{dede:php}
// 引入会员操作类文件(如果未在全局引入)
// require_once(DEDEINC.'/membermodel.cls.php');
// 实例化会员模型类
$member = new MemberHandler();
// 获取会员列表
// 参数1: 每页显示数量
// 参数2: 当前页码 (从1开始)
// 参数3: 排序方式 (如 'regdate DESC' 按注册时间倒序)
$member_list = $member->GetMemberList(10, 1, 'scores DESC');
// 检查是否获取到列表
if(is_array($member_list)) {
foreach($member_list as $m_info) {
// 调用并显示昵称 (基本字段,可以直接从数组获取)
$nickname = $m_info['uname'];
echo "<h3>{$nickname}</h3>";
// 调用并显示自定义字段 'jianjie'
$jianjie = $member->GetFieldValue($m_info, 'jianjie');
if($jianjie) {
echo "<p>简介:{$jianjie}</p>";
}
echo "<hr>";
}
}
{/dede:php}
代码解析:
$member->GetMemberList(10, 1, 'scores DESC');:这个方法用于获取会员列表。10:表示获取10个会员。1:表示第一页。'scores DESC':按会员积分从高到低排序。
foreach($member_list as $m_info):遍历获取到的会员列表。$nickname = $m_info['uname'];:对于会员的基本字段(如userid,uname,email等),可以直接从数组$m_info中获取键名。$member->GetFieldValue($m_info, 'jianjie');:和单个会员调用一样,使用GetFieldValue来获取自定义字段的值。
总结与注意事项
- 字段名是关键:务必去后台的“会员模型” -> “字段管理”中,或者直接查看数据库
dede_member_model_field表,确认你要调用的字段的准确field名称。 MemberHandler类:这是调用会员模型的核心,确保它在你的代码中可以被正确实例化,在大多数模板中,全局环境已经加载了这个类,所以可以直接使用。GetFieldValuevs 直接数组访问:基本字段(如userid,uname)可以直接从$member_info数组获取,但对于自定义字段,必须使用GetFieldValue()方法,因为 DedeCMS 对这些字段的存储方式可能做了特殊处理,这个方法能确保正确获取。- 缓存问题:如果你修改了会员模型字段,前台页面可能没有立即更新,可以尝试清除 DedeCMS 的缓存文件 (
/data/cache/) 来解决。 - 安全性:在输出用户填写的内容时,如果内容可能包含 HTML 或 JavaScript,建议使用
htmlspecialchars()函数进行转义,防止 XSS 攻击。echo htmlspecialchars($jianjie);。
通过以上方法,你就可以灵活地在 DedeCMS 的任何模板中调用和显示会员模型的自定义字段了。
