转载,已微调和加备注。原作者:保罗森,来源:http://blog.csdn.net/slyjit/article/details/17116109
最近要给管理员增加一个限定帖子编辑的权限,Discuz的原生表是最好不要改动的,怎么办呢,发现 forum_post 表中有个 status 字段,先看看这个字段的作用:
forum_post 的 status 字段(二进制位存储,对应十进制值为 #D 后的值,存储在数据库中)
#B 0000 0000 0000 0001 #D 1帖子被屏蔽
#B 0000 0000 0000 0010 #D 2帖子被警告
#B 0000 0000 0000 0100 #D 4帖子审核后再编辑标记,用于防止重复加分
#B 0000 0000 0000 1000 #D 8手机版发帖标示
不多说,可以在这个字段上做些猫腻。
新的权限给定一个不曾出现过的值那就是 10000 即 16 (注①), 原生这个字段的长度只有1,我们首先要将其修改为2(注②);
大张小站注:
① 在Discuz! X3.1中确认10000这个状态表示微博来源的信息,因此请自行合适采用其他位标示;
② 在Discuz! X3.1中确认status字段数据类型为 int(10) ,无需修改字段长度。
下面就是权限的增加:
1、首先在管理面板展示此权限。需修改 viewthread.htm 模板,楼层的管理权限在87行设置,管理员的管理权限在 129 行(楼层管理和楼主管理是分开的)。可以复制类似的代码进行修改,例如我想做一个编辑“锁定”,其功能和警告类似,复制警告的代码并修改添加即可:
<!--{if $_G['group']['allowwarnpost']}--><!--{eval $modopt++}--><a href="JavaScript:;" onclick="modaction('lock', '$_G[forum_firstpid]')">{lang lock}</a><span class="pipe">|</span><!--{/if}-->
语言包自行修改;
2、创建新文件 source\include\topicadmin\topicadmin_lock.php 使lock操作合法化(可以先复制“警告”的文件进行);
3、新增lock弹框内容 forum/topicadmin_action.htm 可复制warn的然后根据自己需求进行修改 52-57 行;
4、修改build表单提交页的数据操作 topicadmin_lock.php ,这个文件中“警告”的状态码是2我们找到有关2的操作,替换为“锁定”的状态16;日志可以根据需求自行修改54行左右;
5、可以在帖子上显示帖子被禁止编辑的提示 viewthread_node_body.htm (24-26行)。
效果图:
附:PHP的位运算
PHP的位运算,很早之前就接触过,后来不常用,也就慢慢忘记了;今天再次复习了下
位运算总共有&(与) |(或) ^(异或)~(非)>>(向右位移运算)<<(向左位移运算);具体怎么个运算法,看例子就明白了。 $a = 7; //转为二进制 111 $b = 2; //转为二进制 010 //大张小站注:以上数值不能打引号! $a & $b = 010 = 2 (相同位上都为1时为1,否则为0) $a | $b = 111 = 7 (有1即为1)
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截