discuz两个插件一个判断实现全站昵称

开发项目与Discuz论坛融合,由于论坛注册需要用户名,项目中注册使用手机号作为登录名,为了做到账户统一,做了BBS同步注册和登录。BBS这边为了保护用户的隐私我安全性,所以这边找了半天解决方案,最终在两个插件的基础上实现了BBS的昵称显示。


discuz两个插件一个判断实现全站昵称 Discuz 插件  第1张

用到的两个插件分别是 论坛昵称插件2.5-3.1(qqy_ltnc)和 信息完善插件免费版(iplus_profile)。安装之后的界面预览一下:


discuz两个插件一个判断实现全站昵称 Discuz 插件  第2张

这个是论坛昵称设置的界面,选择可以设置昵称的用户组,我们这边设置用户只能设置一次昵称(昵称不能重复的)。


discuz两个插件一个判断实现全站昵称 Discuz 插件  第3张

这是用户完善信息插件设置界面,也是可以设置必须完善信息的用户组。由于是免费的这个时间提醒是不能用的。

安装好之后,我们看一下前台用户中心:

discuz两个插件一个判断实现全站昵称 Discuz 插件  第4张

discuz两个插件一个判断实现全站昵称 Discuz 插件  第5张

用户中心多了一个昵称栏目,点进去之后是我设置好的,没有设置之前是一个简单的输入框,会检测你的昵称是否被使用。

下一步就是说一下修改插件代码了。

由于 完善个人信息 插件只能设置 用户附加信息的选择,也就是论坛自带的会员真实姓名、性别等那个用户栏目表的信息,而我们需要操作的是会员表(common_member),我是怎么知道要修改这个会员表(common_member)的呢,因为我看了 会员昵称 插件的安装和卸载源文件。

会员昵称插件安装文件内容:

<?php

if(!defined('IN_DISCUZ')) {
	exit('Access Denied');
}

DB::query("ALTER TABLE ".DB::table('common_member')." ADD `addname` int(5)");
$finish = true;

?>

会员昵称插件卸载文件内容:

<?php
if(!defined('IN_DISCUZ')) {
	exit('Access Denied');
}

DB::query("ALTER TABLE ".DB::table('common_member')." DROP `addname`");
$finish = true;

?>

在这边表(common_member)中增加(删除) addname 字段。


由此我们可以看出两个插件操作的表不一样。

再来看一下 会员信息完善 插件源文件: 会员信息是否完善判断方法


<?php
if(!defined('IN_DISCUZ')) {
	exit('Access Denied');
}

class plugin_iplus_profile {
	function common(){
		global $_G;
		if(isset($_COOKIE["iplus_profile_default"])) return '';
		if($_GET['mod']=='spacecp'&&$_GET['ac']=='profile') return '';
		elseif($_G['tid']||$_G['fid']){
			$vars = $_G['cache']['plugin']['iplus_profile'];
			$groups=unserialize($vars['groups']);
			$note=trim($vars['note']);
			$long=intval($vars['long']);
			
			if($_G['uid']&&in_array($_G['groupid'],$groups)){
				$ncflag = DB::result_first("SELECT addname FROM " . DB::table('common_member') . " WHERE uid=".$_G['uid'] );
				//判断用户昵称是否设置
				if($ncflag==null &&trim($ncflag)=="" ){
					setcookie("iplus_profile",TIMESTAMP,TIMESTAMP+$long);
					showmessage($note,'/home.php?mod=spacecp&ac=plugin&id=qqy_ltnc:plugin');
					return '';
				}
				else{
					$config=unserialize($_G['setting']['iplus_profile_setting']);
					if(!$_G['setting']['iplus_profile_setting']||!count($config)) return '';
					$profile=DB::fetch_first("select ".implode(',',$config)." from ".DB::table("common_member_profile")." where uid=".$_G['uid']);
					
					foreach($profile as $k=>$v){
							if(!$v){
								setcookie("iplus_profile",TIMESTAMP,TIMESTAMP+$long);
								showmessage($note,'/home.php?mod=spacecp&ac=profile');
								return '';
							}
					}					
				}
				
				
				setcookie("iplus_profile_default",TIMESTAMP,TIMESTAMP+2592000);
			}
		}
		return '';
	}
}
class plugin_iplus_profile_home extends plugin_iplus_profile {
	function spacecp_profile_top_output(){
		global $_G;
		if(isset($_COOKIE["iplus_profile"])){
			$config=unserialize($_G['setting']['iplus_profile_setting']);
			if(!$_G['setting']['iplus_profile_setting']||!count($config)) return '';
			$wherein='';
			foreach($config as $k=>$v){
				$wherein.=empty($wherein)? "'$v'":",'$v'";
			}
			$profiles = DB::fetch_all("SELECT title  FROM ".DB::table('common_member_profile_setting')." where available=1 and fieldid in(".$wherein.") ORDER BY available DESC, displayorder");
			$tips='';
			foreach($profiles as $k=>$v){
				$tips.=empty($tips)? "$v[title]":lang('plugin/iplus_profile','tips_2')."$v[title]";
			}
			return '<p class="tbmu mbm">'.lang('plugin/iplus_profile','tips_1').$tips.'</p>';
		}
		return '';
	}
}
?>


$ncflag = DB::result_first("SELECT addname FROM " . DB::table('common_member') . " WHERE uid=".$_G['uid'] ); 这一句就是我们根据用户ID读common_member表用户的昵称是否为空。

下一个判断就是我们加上去的:

if($ncflag==null &&trim($ncflag)=="" ){

    昵称未填写 跳转到 昵称 填写页面

}

else{

    这里面是原插件判断。

}

由于这个插件我只是为了更好的判断昵称是否要填写,也就是有一个优先级在这里面,所以把其他的放在了else里面。

下面是已经修改好的插件,需要的可以下载


本文标题:discuz两个插件一个判断实现全站昵称
本文链接:https://masoft.cn/post/14.html
作者授权:除特别说明外,本文由 智汇软件 原创编译并授权 ASP.NET、PHP、JAVA开发技术 刊载发布。
版权声明:本文使用「署名-禁止演绎 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

本文 暂无 评论

Top

分享:

支付宝

微信