公司最近在做一个游戏论坛,需要JAVA项目和Discuz同步登陆和退出,JAVA项目那边用了 discuz-ucenter-api-for-java 这个开源项目,那边的用户名是邮箱或者手机号码,长度肯定不止15个字符(邮箱账号的话@xxx.xxx就占了好几位),而Discuz的用户名也已经限制了长度,没办法,只能改源码了。我对DZ源码也不熟,于是在官方论坛搜了一大通,发现一帮人需要解决这个问题,但是官方一般给出的解释是:不建议修改。DZ自从被TX收购以后,节操掉的也差不多了,不愧为乌云上最无良厂商之一。遂去google了一下,虽然有一些提到,但都是X1.5,X2的,已经不适合新版的DZ了。
下面给出个人总结的解决办法:
1、 添加用户函数,修改source\class\class_member.php,定位578行,把
} elseif($usernamelen > 15) {
修改为(不一定要改为32,你需要多少位都可以,下同):
} elseif($usernamelen > 32) {
2、AJAX验证,修改source\module\forum\forum_ajax.php,定位22行,把
} elseif($usernamelen > 15) {
修改为:
} elseif($usernamelen > 32) {
3、前端js验证,修改static\js\register.js,定位281、282行,把
if(unlen < 3 || unlen > 15) { errormessage(id, unlen < 3 ? '用户名不得小于 3 个字符' : '用户名不得超过 15 个字符');
修改为:
if(unlen < 3 || unlen > 32) { errormessage(id, unlen < 3 ? '用户名不得小于 3 个字符' : '用户名不得超过 32 个字符');
4、Ucenter中的用户名过滤,修改uc_client\model\user.php 和 uc_server\model\user.php,同样定位到44行,把
if(len>15 ||len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|guestexp/is",username)) {
修改为:
if(len>32 ||len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|guestexp/is",username)) {
5、接着修改模板注册页面表单的长度的限制,修改template\default\member\register.htm,定位到125行,把
<td><input type="text" id="{$this->setting['reginput']['username']}" name="" class="px" tabindex="1" autocomplete="off" size="25" maxlength="15" required /></td>
修改为:
<td><input type="text" id="{$this->setting['reginput']['username']}" name="" class="px" tabindex="1" autocomplete="off" size="25" maxlength="32" required /></td>
6、然后修改语言包,修改source\language\lang_message.php,定位到230行,把
'profile_username_toolong' => '抱歉,您的用户名超过 15 个字符,请输入一个较短的用户名',
修改为:
'profile_username_toolong' => '抱歉,您的用户名超过 32 个字符,请输入一个较短的用户名',
7、接着修改语言包,修改source\language\member\lang_template.php,定位到52行,把
'register_username_tips' => '用户名由 3 到 15 个字符组成',
修改为:
'register_username_tips' => '用户名由 3 到 32 个字符组成',
8、最后是修改数据库的用户名长度限制,因为字段属性为 char(15),varchar(15),char(20)等等,我们统一修改它为 varchar(32),当然你要自己定义也无妨,复制和运行以下SQL语句即可:
ALTER TABLE `pre_common_adminnote` modify column `admin` varchar(32); ALTER TABLE `pre_common_banned` modify column `admin` varchar(32); ALTER TABLE `pre_common_diy_data` modify column `username` varchar(32); ALTER TABLE `pre_common_grouppm` modify column `author` varchar(32); ALTER TABLE `pre_common_member` modify column `username` varchar(32); ALTER TABLE `pre_common_member_crime` modify column `operator` varchar(32); ALTER TABLE `pre_common_member_validate` modify column `admin` varchar(32); ALTER TABLE `pre_common_mytask` modify column `username` varchar(32); ALTER TABLE `pre_common_report` modify column `username` varchar(32),modify column `opname` varchar(32); ALTER TABLE `pre_common_session` modify column `username` varchar(32); ALTER TABLE `pre_common_word` modify column `admin` varchar(32); ALTER TABLE `pre_common_card_log` modify column `username` varchar(32); ALTER TABLE `pre_common_failedlogin` modify column `username` varchar(32); ALTER TABLE `pre_common_invite` modify column `fusername` varchar(32); ALTER TABLE `pre_common_member_verify_info` modify column `username` varchar(32); ALTER TABLE `pre_forum_announcement` modify column `author` varchar(32); ALTER TABLE `pre_forum_collection` modify column `username` varchar(32),modify column `lastposter` varchar(32); ALTER TABLE `pre_forum_collectioncomment` modify column `username` varchar(32); ALTER TABLE `pre_forum_collectionfollow` modify column `username` varchar(32); ALTER TABLE `pre_forum_collectionteamworker` modify column `username` varchar(32); ALTER TABLE `pre_forum_creditslog` modify column `fromto` varchar(32); ALTER TABLE `pre_forum_forumrecommend` modify column `author` varchar(32); ALTER TABLE `pre_forum_groupuser` modify column `username` varchar(32); ALTER TABLE `pre_forum_order` modify column `admin` varchar(32); ALTER TABLE `pre_forum_pollvoter` modify column `username` varchar(32); ALTER TABLE `pre_forum_post` modify column `author` varchar(32); ALTER TABLE `pre_forum_postcomment` modify column `author` varchar(32); ALTER TABLE `pre_forum_promotion` modify column `username` varchar(32); ALTER TABLE `pre_forum_ratelog` modify column `username` varchar(32); ALTER TABLE `pre_forum_rsscache` modify column `author` varchar(32); ALTER TABLE `pre_forum_thread` modify column `author` varchar(32),modify column `lastposter` varchar(32); ALTER TABLE `pre_forum_threadmod` modify column `username` varchar(32); ALTER TABLE `pre_forum_trade` modify column `seller` varchar(32),modify column `lastbuyer` varchar(32); ALTER TABLE `pre_forum_tradecomment` modify column `rater` varchar(32),modify column `ratee` varchar(32); ALTER TABLE `pre_forum_tradelog` modify column `seller` varchar(32),modify column `buyer` varchar(32); ALTER TABLE `pre_forum_warning` modify column `operator` varchar(32),modify column `author` varchar(32); ALTER TABLE `pre_home_album` modify column `username` varchar(32); ALTER TABLE `pre_home_blog` modify column `username` varchar(32); ALTER TABLE `pre_home_clickuser` modify column `username` varchar(32); ALTER TABLE `pre_home_comment` modify column `author` varchar(32); ALTER TABLE `pre_home_docomment` modify column `username` varchar(32); ALTER TABLE `pre_home_doing` modify column `username` varchar(32); ALTER TABLE `pre_home_feed` modify column `username` varchar(32); ALTER TABLE `pre_home_feed_app` modify column `username` varchar(32); ALTER TABLE `pre_home_follow` modify column `username` varchar(32),modify column `fusername` varchar(32); ALTER TABLE `pre_home_follow_feed` modify column `username` varchar(32); ALTER TABLE `pre_home_follow_feed_archiver` modify column `username` varchar(32); ALTER TABLE `pre_home_friend` modify column `fusername` varchar(32); ALTER TABLE `pre_home_friend_request` modify column `fusername` varchar(32); ALTER TABLE `pre_home_notification` modify column `author` varchar(32); ALTER TABLE `pre_home_pic` modify column `username` varchar(32); ALTER TABLE `pre_home_poke` modify column `fromusername` varchar(32); ALTER TABLE `pre_home_share` modify column `username` varchar(32); ALTER TABLE `pre_home_show` modify column `username` varchar(32); ALTER TABLE `pre_home_specialuser` modify column `username` varchar(32),modify column `opusername` varchar(32); ALTER TABLE `pre_home_visitor` modify column `vusername` varchar(32); ALTER TABLE `pre_portal_rsscache` modify column `author` varchar(32); ALTER TABLE `pre_portal_topic_pic` modify column `username` varchar(32); ALTER TABLE `pre_ucenter_admins` modify column `username` varchar(32); ALTER TABLE `pre_ucenter_badwords` modify column `admin` varchar(32); ALTER TABLE `pre_ucenter_feeds` modify column `username` varchar(32); ALTER TABLE `pre_ucenter_members` modify column `username` varchar(32); ALTER TABLE `pre_ucenter_mergemembers` modify column `username` varchar(32); ALTER TABLE `pre_ucenter_protectedmembers` modify column `username` varchar(32),modify column `admin` varchar(32);
友情提醒1 如果你用了我的马甲插件,还要执行这句:
ALTER TABLE `pre_myrepeats` modify column `username` varchar(32);
友情提醒2 安装插件的时候最好也看看有没有涉及到用户名的字段,有的话也要修改。
修改完成:
官方提供一个可配置选项就好了,扫了一下酱紫真的折腾啊__________________________
DZ的节操,你懂的
有啥内幕?
敷衍用户反映,忽略各种BUG
bug应该不会太多吧,不过我不用
BUG挺多的其实,不过都是小问题
小问题不应该有才对
橙酱菊苣
狼酱( ̄︶ ̄*))抱抱~
菊苣/w discuz 很坑爹的 (不过在插件模板 的机制方面比pw好
(pw那叫麻烦死人
DZ模板机制和加密机制很赞,不过就是管理的太坑爹了|д` )
DZ有成熟的插件市场比pw是好多了(´・ω・`)
PS:你才是莴苣,你全家都是莴苣( ゚ 3゚)
你全家都是菊苣 我知道的(莴苣是什么。
莴苣是一种蔬菜,很好吃的(つд⊂)
是么。。
http://i3.meishichina.com/attachment/recipe/2013/03/21/20130321173147697322979.jpg
看起来不好吃
(゚Д゚≡゚Д゚) 挑食不是好孩子
。。 不挑食 只是看起来。
那就好(´・ω・`)
新的一周,祝充满能量,开心面对每一天!
博主是做游戏开发的?
不是啊,为啥这么说?
我我我看错了。把论坛看那啥了。
……
长长的代码
要改这么多地方额
对啊,这个比较麻烦的
不过对于需要的人来说,只要方法是对的,就好办
嗯
先来关注下了哈。
看了下,国外的论坛也没有超越discuz的~~~
非常感谢楼主,省了好多事,万分感谢
正好需要,楼主神人,感谢感谢!