Discuz 在发帖或者回帖的时候,默认是显示用户的“用户名”的,这里的用户名就是用户注册的时候使用的用户名,是唯一的。但是很多用户进了论坛之后都会弄一个比较个性的昵称,看到发帖或者回帖的时候自己费尽心构思的昵称居然不会显示在醒目的地方,就很没有归属感,觉得自己“好像不存在”了一样,很不爽。所以我想要实现在用户发帖或者回帖的时候,如果用户自定义了昵称就显示昵称,否则就显示注册的用户名。
Discuz 本身没有这个设定功能(我用的是Discuz 6)。为了解决这个问题,我google了一下,结果发现很多Discuz的用户都想解决这个问题,也有人到官方反应的,不过结果很无奈,这么个小功能貌似一直没有添加。不过好在有人提供了一些思路,我转贴一下,好让更多需要的人google到。
注:修改 Discuz 之前请确保你了解一些PHP编程知识并知道自己在干什么。
首先,打开 include/global.func.php ,在里面添加下面的一个函数:
|
function getnickname($uid){ |
然后打开 include/newreply.inc.php ,找到
|
$author = empty($isanonymous) ? $discuz_user : ”; |
替换成:
|
if($nickname = getnickname($discuz_uid)) { |
然后查找文件中的文本:
|
‘$discuz_user’ // 注意两边的单引号,这样是为了找到sql语句中引用到的 $discuz_user变量 |
替换成:
|
‘$author’ |
接下来打开 include/newthread.inc.php ,找到:
|
$author = !$isanonymous ? $discuz_user : ”; |
替换成:
|
if($nickname = getnickname($discuz_uid)) { |
然后查找文件中的文本:
|
‘$discuz_user’ // 注意两边的单引号,这样是为了找到sql语句中引用到的 $discuz_user变量 |
替换成:
|
‘$author’ |
这样咱们的工作就告一段落了,不过这只能保证改动代码之后用户发的帖子和恢复都会优先显示自定义的昵称,没有昵称才会显示用户名。之前的信息怎么办呢?我看了一下,最需要处理的应该就是帖子列表中的“作者”一栏,其它的比如“最近回复”都会逐渐被后面的新发布的信息顶下去,所以不用关心。这样的话一条 SQL 语句就可以了,假设你的 discuz 安装的时候使用的数据库表的前缀是 “cdb_”, SQL 语句就可以这样写:
|
UPDATE cdb_threads AS A, cdb_memberfields AS B SET A.author=B.nickname WHERE A.authorid=B.uid AND B.nickname!=”; |
辛苦了,谢谢分享,我会继续关注