实现Discuz x3.1 读写分离

因为公司网站的用户量越来越大,所以考虑到给服务器减轻负载,就想到mysql主从配置,然后就想通过mysql主从配置实现Discuz x3.1的数据库读写分离。实现步骤如下: 第一步: MySQL主从设置之主服务器A设置 1.  找到主服务器A的MySQL的配置文件my.ini 2. 打开my.ini,在[mysqld]下面添加以下参数 3. 在主服务器A中添加一个用于主从复制的帐号: 登陆mysql命令行,执行 GRANT REPLICATION SLAVE ON *.* TO ‘帐号’@’从服务器IP’ IDENTIFIED BY ‘密码’; 4. 重启MySQL ,让配置生效 5. 可以通过show master status\G;查看主从数据库是否配置成功。   第二步: MySQL主从设置之主数据库和从数据库数据一致。 1.  关闭论坛访问,停止更新数据 2. 在主服务器中加入只读锁 3. 导出数据库 通过命令导出数据库 mysqldump -u root -p 数据库名 > 导出来的位置   4. 将主服务器的数据库导入到从服务器的数据库 5. 将主数据库服务器解除只读锁     6.  开启论坛访问。   第三步:MySQL主从设置之从服务器B设置 1. 找到从服务器mysql配置文件my.cnf … Continue reading “实现Discuz x3.1 读写分离”

使用Ucenter整合wordpress和Discuz (给博客提速)

本博客自从谷歌在内地无法打开之后,打开速度就开始变慢,于是Jhonse哥我作为技术开发猿而言,怎能允许这情况发生?所以就开始给本博客加速了… 第一步: 去掉wordpress默认加载的谷歌字体样式 找到wordpress的核心文件script-loader.php,在/wp-includes目录下 在script-loader.php文件中搜索fonts.googleapis.com,以及ajax.googleapis.com,然后用360提供的前端公共库CDN服务替换即可。请看截图: 第二步: 使用Ucenter整合wordpress和ucenter,来实现更换Gravatar头像 之前使用了第一步的步骤给本博客提速,确确实实速度是提上来了。不过今天本博客又开始慢了,本以为是第一步修改的代码被恢复了,结果一看代码,不是的,原来影响到打开速度慢的是Gravatar头像。 请看分析代码: 在每个文章详细页都有评论页,也就是需要加载评论用户的头像,而首页以及列表页都木有,所以打开首页和列表速度正常,而点击进入详细页就变的特慢。请看加载头像代码。 //评论头像缓存 function deel_avatar($avatar) { $tmp = strpos($avatar, ‘http’); $g = substr($avatar, $tmp, strpos($avatar, “‘”, $tmp) – $tmp); $tmp = strpos($g, ‘avatar/’) + 7; $f = substr($g, $tmp, strpos($g, “?”, $tmp) – $tmp); $w = get_bloginfo(‘wpurl’); $e = ABSPATH .’avatar/’. $f .’.png’; $t = dopt(‘d_avatarDate’)*24*60*60; if … Continue reading “使用Ucenter整合wordpress和Discuz (给博客提速)”

实现手机网站发帖回帖之后,显示该帖子对应的手机类型图标

虽然Discuz可以通过二次开发手机模板文件,来实现一个手机网站.  但是在手机网站上发帖或者回帖之后,缺少了一个显示该帖子对应的手机类型(android,iphone,wp…)。不过Discuz内置的确确实实有这个功能,但是不是针对于手机网站,而是Discuz提供的手机客户端(掌上论坛)。 所以只能自己看代码,重新给手机网站添加该功能。 帖子列表页 帖子详细页 实现步骤如下: 1.  帖子列表页显示手机标记是根据forum_thread表的status字段。 2.  帖子详细页显示手机标记是根据forum_post表的status字段 1) 发帖功能 首先是针对于帖子列表页: 找到发帖的数据处理模块:  model_forum_post.php 找到入库forum_thread表的位置 $this->param[‘isgroup’] = $this->forum[‘status’] == 3 ? 1 : 0; $this->param[‘publishdate’] = !$this->param[‘modnewthreads’] ? $this->param[‘publishdate’] : TIMESTAMP; $newthread = array( ‘fid’ => $this->forum[‘fid’], ‘posttableid’ => 0, ‘readperm’ => $this->param[‘readperm’], ‘price’ => $this->param[‘price’], ‘typeid’ => $this->param[‘typeid’], ‘sortid’ => $this->param[‘sortid’], ‘author’ => … Continue reading “实现手机网站发帖回帖之后,显示该帖子对应的手机类型图标”

discuz发帖时标题实现高亮功能

discuz虽然有高亮功能,但不是在发帖的时候,可以选择高亮功能,而是对已经发帖成功的主题进行设置,请看如下截图:   而我们要实现的功能是: 在发帖的时候,可以选择高亮功能。 实现步骤: 第一步:修改模板文件 先找到模板文件template/模板风格目录/fourm/post_editor_extra.htm 找到标题(subject)显示位置 <!–{if $_GET[action] != ‘reply’}–> <span><input type=”text” name=”subject” id=”subject” class=”px” value=”$postinfo[subject]” {if $_GET[action] == ‘newthread’}onblur=”if($(‘tags’)){relatekw(‘-1′,’-1′{if $_G[‘group’][‘allowposttag’]},function(){extraCheck(4)}{/if});doane();}”{/if} onkeyup=”strLenCalc(this, ‘checklen’, 80);” style=”width: 25em” tabindex=”1″ /></span> <!–{else}–> <span id=”subjecthide” class=”z”>RE: $thread[subject] [<a href=”javascript:;” onclick=”display(‘subjecthide’);display(‘subjectbox’);$(‘subject’).value=’RE: {echo dhtmlspecialchars(str_replace(‘\”, ‘\\\”, $thread[subject]))}’;display(‘subjectchk’);strLenCalc($(‘subject’), ‘checklen’, 80);return false;”>{lang modify}</a>]</span> <span id=”subjectbox” style=”display:none”><input type=”text” name=”subject” id=”subject” class=”px” value=”” onkeyup=”strLenCalc(this, … Continue reading “discuz发帖时标题实现高亮功能”

discuz x3.2 自定义布局方案设置(自定义标签和插件嵌入)

对于帖子内容的左侧,以及用户的名片上都有一些用户信息(帖内用户信息),而这些信息可以通过discuz后台的界面->界面设置->帖内用户信息来进行调整设置。   而帖内用户信息又分为左侧信息以及头像菜单,以及都有对应的模板规范,只要懂html语言就可以直接进行布局了。   虽然discuz提供了很多用户信息标记,但是自己想要加其它属性来进行二次开发,如何添加?请看如下步骤: 第一步: 找到这两个模板显示的位置(已左侧信息模板为例) 找到帖子详细页模板文件: template/模板目录/forum/viewthread.htm 查找左侧信息模板 <!–{eval $postcount = 0;}–> <!–{loop $postlist $post}–> <!–{if $rushreply && $_GET[‘checkrush’] && $post[‘rewardfloor’] != 1}–> <!–{eval continue;}–> <!–{/if}–> <div id=”post_$post[pid]”> <!–{subtemplate forum/viewthread_node}–> </div> <!–{eval $postcount++;}–> <!–{/loop}–> 这里加载了 viewthread_node模板 直接打开viewthread_node模板查找左侧显示位置 <!–{hook/viewthread_sidetop $postcount}–> <!–{if !($_G[‘setting’][‘threadguestlite’] && !$_G[‘uid’])}–> {eval viewthread_profile_node(‘left’, $post);} <!–{if $post[authorid] != $_G[uid]}–> <ul class=”xl xl2 … Continue reading “discuz x3.2 自定义布局方案设置(自定义标签和插件嵌入)”

Discuz模板中使用cutstr来截取字符串

给Discuz写模板的时候需要对字符串进行截取,可以使用cutstr方法来截取。请看实现代码: <!–{eval echo cutstr($value[‘subject’],30,”);}–> cutstr方法代码如下: /** * [discuz] 基于PHP没有安装 mb_substr 等扩展截取字符串,如果截取中文字则按2个字符计算 * @param $string 要截取的字符串 * @param $length 要截取的字符数 * @param $dot 替换截掉部分的结尾字符串 * @return 返回截取后的字符串 */ function cutstr($string, $length, $dot = ‘…’) { // 如果字符串小于要截取的长度则直接返回 // 此处使用strlen获取字符串长度有很大的弊病,比如对字符串“新年快乐”要截取4个中文字符, // 那么必须知道这4个中文字符的字节数,否则返回的字符串可能会是“新年快乐…” if (strlen($string) <= $length) { return $string; } // 转换原字符串中htmlspecialchars $pre = chr(1); $end = … Continue reading “Discuz模板中使用cutstr来截取字符串”

discuz自定义DIY模块类

在使用DISCUZ系统的DIY功能时,可能有的模块不能满足自己的需求,所以需要自定义DIY模块类来实现自己想要需求。实现自定义功能步骤如下: 第一步:添加DIY模块类 在/source/class/block目录下创建新模块类文件夹   然后创建blockclass.php文件,代码如下: <?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * * $Id: blockclass.php 27449 2012-02-01 05:32:35Z zhangguosheng $ */ if(!defined(‘IN_DISCUZ’)) { exit(‘Access Denied’); } $blockclass = array( ‘name’ => lang(‘blockclass’, ‘blockclass_jhonse’), ); ?> 再添加功能模块类block_jhonseforum.php   <?php if(!defined(‘IN_DISCUZ’)) { exit(‘Access Denied’); … Continue reading “discuz自定义DIY模块类”

【discuz】Discuz!代码(UBB)之修改视频宽度为自适应

在Discuz x3系统中,发布视频的时候,可以设置视频的宽度和高度,请看如下截图: 但是有的时候需要视频的宽度为自适应(100%),可能大家会这样设置,直接把宽度的值设置为100%即可,确确实实可以这样,但是需要修改discuz系统的过滤功能,在discuz中,此值只能为数值,不能为字符串,如果为字符串则其值为0. 需要自适应的地方: 如果把视频的宽度设置750,但是在其它的地方显示该视频的时候就默认值就为750. 如:discuz x3 新功能:帖子预览 所以需要修改该视频添加的宽度为自适应。 修改方法: 1. 找到discuz!代码(UBB)转换文件:source/function/function_discuzcode.php 2. 然后找到视频转换方法 function parsemedia($params, $url) { $params = explode(‘,’, $params); $width = intval($params[1]) > 800 ? 800 : intval($params[1]); $height = intval($params[2]) > 600 ? 600 : intval($params[2]); $url = addslashes($url); if(!in_array(strtolower(substr($url, 0, 6)), array(‘http:/’, ‘https:’, ‘ftp://’, ‘rtsp:/’, ‘mms://’)) && !preg_match(‘/^static\//’, $url) && … Continue reading “【discuz】Discuz!代码(UBB)之修改视频宽度为自适应”

【discuz】为文章审核添加提示功能

discuz自带的审核功能中,缺少一个提示功能,虽然发布文章确实可以限制审核,但是管理员不通过后台查看审核内容,就不会发现文章审核信息。所以就在前台首页的用户信息中的【提示】显示出来,方便管理员审核内容。 还是根据之前的方法而言,通过发布文章的POST链接: portal.php?mod=portalcp&ac=article 找到需要修改的文件:./source/module/portal/portal_portalcp.php 发现如下代码: require_once libfile(‘function/portalcp’);//被调用的函数文件 require_once libfile(‘portalcp/’.$ac, ‘include’);//真正操作的文件 然后再找到文件: ./source/include/portalcp/portalcp_article.php 发现提交的代码: if(submitcheck(“articlesubmit”, 0, $seccodecheck, $secqaacheck)) {… 这就好办了,只需要在文章操作数据库之后添加提示功能就可以解决了。 在提示信息中,需要获得对应文章的ID,方便管理员可以直接访问该文章。于是在如下代码之后: $aid = DB::insert(‘portal_article_title’, $setarr, 1); 刚好添加文章数据之后返回了对应文章的ID。 接下来就实现提示功能: /************************************/ /*Jhonse修改点*/ /*用户提示功能对应的数据表为:pre_home_notification*/ /*1. 添加提示信息数据*/ /*2. 更新提示数目 /*提示数目对应的数据表为: pre_common_member newprompt字段*/ /************************************/ /*添加提示信息数据*/ //文章为审核状态 if($article_status == 1){ $JMess = “<div style=\”padding:10px;\”><h3>”.文章审核.”</h3>您好! “.”用户”.$_G[‘username’].”发布了一篇文章【”.$setarr[‘title’].”</i></b></a>】,【<a href=\”admin.php?frames=yes&action=moderate&operation=articles&dateline=all\” style=\”color:red;\” ><b><i>请审核…</i></b></a>】.</div>”; $jarr = array( ‘uid’=>’1’, ‘type’=>’system’, … Continue reading “【discuz】为文章审核添加提示功能”

【discuz】对活动版块的积分扣除功能进行修改以及修复参加人数功能

之前有【对活动版块的报名人数进行修改】,当时没有考虑到积分处理的问题。现在刚好遇到此问题,就此解决下。首先对应discuz自带的积分功能而言,只能扣除一个人的积分,加入报名的人数大于1的时候就不起作用了。还有一个对于要扣除积分的帖子,没有一个选择项,可扣除,可以不扣除的功能。我们就来一步一步实现以上功能。 第一步: 先对于活动版本添加一个可扣除可以不扣除的选项 在后台->全局->站点功能->活动主题添加选项 第二步: 设置活动帖子需要扣除积分 第三步:看看就之前设置好的效果 说明:支付方式要设置为默认选中第一个。 代码如下: jhonse(".lb input.pr").eq(0).attr("checked","checked"); 第四步: 修改代码,来判断支付方式,并实现积分扣除(参加活动人数) 通过post链接就可以找到要修改的文件为:/source/module/forum/forum_misc.php 首先要找到扣除积分的代码: checklowerlimit(array('extcredits'.$_G[‘setting’][‘activitycredit’] => ‘-‘.$activity[‘credit’]));//检测积分是否足够 updatemembercount($_G[‘uid’], array($_G[‘setting’][‘activitycredit’] => ‘-‘.$activity[‘credit’]), true, ‘ACC’, $_G[‘tid’]);//更新积分数据 大家可以查看这两个函数的代码 checklowerlimit函数在./source/function/function_credit.php updatemembercount函数在./source/class/class_credit.php 其实这两个函数都是调用了class_credit类的方法来操作积分的。 然后就扣除积分的位置之上来判断支付方式 /*开始判断支付方式*/ $jdata = unserialize($ufielddata); /*获得支付方式*/ $jpaytype = $jdata[‘userfield’][‘field7’]; if($jpaytype == "华高币"){ /*获得参加人数*/ $jjoinnumstr = $jdata[‘userfield’][‘field8’]; /*转换为整形*/ $jjoinnumint = intval($jjoinnumstr); /*将需要支付的华高币转换为整形*/ $jcredit = intval($activity[‘credit’]); /*获得总华高币*/ $jtotle … Continue reading “【discuz】对活动版块的积分扣除功能进行修改以及修复参加人数功能”