最近想要实现discuz的一个权限控制功能,功能为帖子页隐藏部分内容,只有指定会员组才能显示这部分内容,discuz权限控制内置的指定用户组才能进入并且浏览版块及其中的帖子,这个功能没办法实现我想要的效果,所以就寻觅是否有插件能实现这个功能。于是我找到了discuz隐藏仅VIP用户可见v1.4.1高级版这个插件。

隐藏仅VIP用户可见V1.4.1 高级版介绍

discuz隐藏仅VIP用户可见V1.4.1 高级版插件地址:http://addon.discuz.com/?@addon_bqyc.plugin
其实现的功能为在编辑框增加一个按钮,点击按钮出现输入框,在其中输入需要隐藏的内容,点确定就会在编辑框中添加类似[viphidden]内容[/viphidden]的标签,当用户浏览帖子的时候,就通过插件将这部分标签用正则匹配,然后替换成诸如“vip才能显示此内容”的用户提示。针对电脑版和手机触屏版都能进行替换显示,并且在搜索和门户中展示的时候都会进行替换,避免了隐藏信息的泄露。但是唯一的问题是这个插件太贵了。

部分内容vip可见

我想起了原来有一个插件也能实现差不多的功能,插件为:DC帖子付费可见 商业版v1.1.8,链接为:http://addon.discuz.com/?@dc_sell.plugin 参考其代码应该就能做出跟隐藏仅vip用户可见差不多功能的插件。
所以一个全新的插件“部分内容vip可见”就诞生了。
其实现的功能为:编辑框中添加一个图标,点击图标,输入需要隐藏的内容,点击确定,编辑框中中插入[viphidden]content[/viphidden]内容标签,帖子展示的时候会替换此部分内容,针对用户组显示不同的内容,后台可以设置允许发布的用户组,针对哪些用户组显示隐藏内容,语言中可以设置非指定用户组显示的隐藏提示内容,vip用户组显示的内容,门户文章中显示的内容,并且支持手机触屏版,针对搜索也做了优化,具体可以参考截图或者下载源码自行测试。

主要实现截图:

-----2018-06-27---5.23.59

-----2018-06-27---5.24.07

-----2018-06-27---5.24.21

-----2018-06-27---5.25.35

-----2018-06-27---5.25.58

主要实现代码解析

编辑框钩子添加按钮,点击按钮显示内容和点确定插入编辑框内容代码

function post_editorctrl_left() {
	global $_G;
	if(!$this->open)
		return;
	if(!in_array($_G['groupid'], (array)unserialize($this->cvar['allow'])))
		return;
	return '<style type="text/css">
.b2r #e_viphidden	{ background:transparent url("source/plugin/vip_hidden/img/b2r.gif") no-repeat 0 0; overflow: hidden;background-position: 7px 4px;background-position: 0px 1px; }
.b1r #e_viphidden	{ background:transparent url("source/plugin/vip_hidden/img/b1r.gif") no-repeat 0 0; overflow: hidden;background-position: 7px 4px;background-position: 0px 1px; }
</style>
<a id="e_viphidden" title="'.$this->lang('sellinsert').'">'.$this->lang('sell').'</a>';
}
function post_middle_output(){
	global $_G;
	if(!$this->open)
		return;
	if(!in_array($_G['groupid'], (array)unserialize($this->cvar['allow'])))
		return;
	$str = $this->lang('sellinmsg').'';
	$return=<<<EOF
	<script type="text/javascript">
	EXTRAFUNC['showEditorMenu']['viphidden']='ext_viphidden';
	function ext_viphidden(tag,flag){
		if(tag != 'viphidden') {
			return false;
		}
		if(flag==1){
			opentag = '[viphidden]';
			str = $('e_viphidden_param_1') && $('e_viphidden_param_1').value ? $('e_viphidden_param_1').value : (selection ? selection : '');
			str = opentag + str + '[/viphidden]';
			insertText(str, strlen(opentag), 7, false, EXTRASEL);
			viphiddenclear();
			doane();
		}
	}
	function viphiddenclear(){
		$('e_viphidden_param_1').value='';
	}
	</script>
	<div class="p_pof upf" id="e_viphidden_menu" style="width: 270px;display: none">
		<div class="p_opt cl">
			<span class="y" style="margin:-10px -10px 0 0"><a onclick="hideMenu();return false;" class="flbc" href="javascript:;">{$this->lang(close)}</a></span>
		<div>
		{$this->lang(sellinmsg)}<br />
		<textarea id="e_viphidden_param_1" style="width: 98%" cols="50" rows="5" class="txtarea"></textarea><br />
	</div>
	<div class="pns mtn">
		<button id="e_viphidden_submit" class="pn pnc"><strong>{$this->lang(confirms)}</strong></button>
	</div>
</div>
</div>
	
EOF;
	return $return;
}
}

其他代码就自己下载源码自己研究吧。

部分内容vip可见插件下载地址

链接:https://pan.baidu.com/s/1vNzpY1UAIZr018FKq0Gy_A 密码:obkz