织梦getmembername如何获取会员名?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文

这是一个在模板开发中非常常用且核心的函数,主要用于根据用户ID(mid)获取用户的用户名、昵称等信息。

织梦getmembername
(图片来源网络,侵删)

函数定义与作用

GetMemberName 是一个自定义的PHP函数,它被设计用来在模板文件(.htm)中调用,以避免在模板里写复杂的PHP逻辑。

核心作用: 根据一个给定的会员ID(mid),查询数据库,并返回该会员的指定字段(如用户名、昵称、邮箱等)的值。

函数签名:

function GetMemberName($mid, $field='mtype')

参数详解

该函数接受两个参数,其中第二个是可选的。

织梦getmembername
(图片来源网络,侵删)

$mid (必需)

  • 类型: 整数
  • 含义: 会员的唯一ID,即 dede_member 表中的 mid 字段值。
  • 来源: 通常通过其他织梦标签或变量获取。
    • {dede:arclist} 标签中的 mid 字段:[field:mid /]
    • 当前登录会员的ID:{$cfg_ml->M_ID}
    • 评论者、发布者等关联的会员ID。

$field (可选)

  • 类型: 字符串
  • 含义: 你希望从 dede_member 表中获取的字段名
  • 默认值: 'mtype',这是很多人容易混淆的一点,默认获取的不是用户名,而是会员类型(如“个人”、“企业”等)。
  • 常用值:
    • 'uname'用户名(注册时填写的账号)。
    • 'mtype':会员类型(默认值)。
    • 'userid'用户名(和 uname 通常是同一个值)。
    • 'matt':会员状态(如 0 为正常,1 为禁用)。
    • (空字符串):如果设置为空字符串,函数会直接返回该会员ID对应的用户名,这是一种简写形式。

使用场景与示例

GetMemberName 最常见的场景是在列表页或内容页显示文章作者、评论人等信息。

在文章列表页显示作者用户名

假设你在修改 arclist.htm 模板,想在文章标题旁边显示发布者的用户名。

错误的做法(直接调用):

{dede:arclist titlelen='50'}
    <li>
        [field:title/] - 作者:[field:uname/]  <!-- 这样是错误的,field:uname 通常为空 -->
    </li>
{/dede:arclist}

arclist 标签默认不提供 uname 字段,[field:uname/] 通常是空的。

织梦getmembername
(图片来源网络,侵删)

正确的做法(使用 GetMemberName):

{dede:arclist titlelen='50'}
    <li>
        [field:title/] - 作者:[field:function GetMemberName(@me,'uname')/]
    </li>
{/dede:arclist}

代码解析:

  1. {dede:arclist} 循环输出文章列表。
  2. [field:mid/] 会获取到当前这篇文章的发布者会员ID。
  3. [field:function ... /] 是织梦模板的一个特殊用法,允许你在标签内调用一个PHP函数。
  4. @me 是一个占位符,在这里它代表了 [field:mid/] 的值,也就是当前的会员ID。
  5. GetMemberName(@me, 'uname') 就等同于 GetMemberName(123, 'uname')(假设当前文章作者的ID是123)。
  6. 函数执行后,会返回ID为123的用户的 uname 字段值(即用户名)。

更简洁的写法(利用默认参数): 因为当 $field 参数为空字符串时,函数会返回用户名,所以可以这样写,效果完全一样:

[field:function GetMemberName(@me,'')/]

或者,更常见的简写形式(省略引号):

[field:function GetMemberName(@me)/]

注意: 这种简写依赖于函数内部对空字符串的判断,虽然常用,但为了代码清晰,推荐使用 GetMemberName(@me, 'uname')

页显示作者信息

article_article.htm 中,你可以这样调用:

发布者:{dede:field.userid function='GetMemberName(@me,"uname")'/}

或者更简洁的:

发布者:{dede:field.userid function='GetMemberName(@me)'/}

这里 {dede:field.userid} 获取的就是当前文章的 mid

获取会员昵称(如果昵称字段存在)

如果你的系统启用了昵称功能,并且有一个 nickname 字段,你可以这样获取:

[field:function GetMemberName(@me, 'nickname')/]

注意: 你需要确保 dede_member 表中确实存在 nickname 这个字段,并且有数据。


源码解析(了解其工作原理)

如果你想深入了解,可以在 /include/helpers/extend.helper.php 文件中找到这个函数的定义:

if ( ! function_exists('GetMemberName'))
{
    function GetMemberName($mid, $field='mtype')
    {
        if(empty($mid)) return '';
        $dsql = new DedeSql(false);
        $row = $dsql->GetOne("SELECT $field FROM `dede_member` WHERE mid='$mid';");
        if(is_array($row))
        {
            if($field == '') return $row['uname'];
            return $row[$field];
        }
        else
        {
            return '';
        }
    }
}

源码逻辑:

  1. 检查ID: 首先检查 $mid 是否为空,如果为空则直接返回空字符串。
  2. 连接数据库: 创建一个数据库连接对象 $dsql
  3. 执行查询: 执行一条SQL语句,从 dede_member 表中根据 mid 查询你指定的 $field
  4. 处理结果:
    • 如果查询成功(is_array($row) 为真):
      • 特殊处理: $field 参数是空字符串,则返回用户名字段 uname 的值,这就是为什么 GetMemberName(@me) 能工作的原因。
      • 常规处理: 否则,返回查询到的 $field 对应的值(如 mtype, matt 等)。
    • 如果查询失败(没有找到该ID的会员),则返回空字符串。

总结与注意事项

项目 说明
功能 根据会员ID (mid) 获取会员信息。
核心参数 GetMemberName($mid, $field)
$mid 会员ID,通常来自 [field:mid]{dede:field.userid}
$field 要获取的字段名。默认是 mtype,不是用户名!
获取用户名 GetMemberName(@me, 'uname')GetMemberName(@me, '')GetMemberName(@me)
适用位置 所有织梦模板文件(.htm),通常与 {dede:arclist}{dede:list}{dede:field} 等标签结合使用。
注意事项 确保传入的 $mid 是有效的。
明确 $field 的值,不要误用默认的 mtype
如果获取的字段在数据库中不存在,函数会返回空。

熟练掌握 GetMemberName 函数,能让你在开发织梦模板时事半功倍,轻松实现各种与会员信息相关的显示需求。

-- 展开阅读全文 --
头像
dede arc.listview如何调用列表数据?
« 上一篇 今天
C语言中close与fclose到底有何区别?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]