DISCUZ 特殊积分解决方案

最近discuz有个小功能需求,需要实现送某某积分的操作,但是是对外的。不可进行其它操作。下面用B积分进行表示

只是需要在积分日志列表上进行显示,但是又不可对该积分进行操作。考虑到不影响discuz的系统.使用扩展积分8类型,但是该积分是关闭状态,无法进行其它操作。

送B积分时,使用类型参数8进行标志。如:

							updatemembercount ( array (
									// 用户id
							), array (
									8 => $score  //分值
							), true, '', 1, '', '标题','内容描述' );

然后前台显示时,在插件钩子处,挂上类型8的显示,只在特殊地方进行显示。别的地方调用时,也不会出现什么影响

如:

class plugin_xxxxx_home extends plugin_gd_jifen {
	function spacecp_credit_extra() {
			$_G ['setting'] ['extcredits'] [8] = array (
					'img' => '',
					'title' => 'B积分',
					'unit' => '',
					'ratio' => 0,
					'showinthread' => '0',
					'allowexchangein' => '',
					'allowexchangeout' => '',
					'hiddeninheader' => true 
			);
	}
}

前台显示赠送的B积分提示

原理:http://witmax.cn/discuz-credits-analysis.html

但是具体要提示的,需要补充下面的代码:

$_G ['setting'] ['creditnames'] .= ',8|B|';

页面通过判断html里是否有该标志进行对应的提示

DISCUZ2.0 升级到2.5 小记

最近接了个单子做处理。

不过朋友要求将2.0升级到2.5。但一般应用,升级或多或少都会出问题。本地准备,出问题再解决问题Y(^_^)Y,做事最要紧的是信心,如是自己都不相信自己,又怎么让别人相信你呢?

各种准备是必要的:

1.svn备份项目

2.备份数据库

3.因为担心项目内部做过小修改。所以上官方原版下载最新版本,通过svn比对,检查项目的差异性。因为如果做过特殊处理,必要是得还原的。

4.关闭原平台的应用通讯和云平台的链接,形成独立状态,这样修改过程中,出意外也不会影响到别的应用

注:同服务器修改过程,ip可用的情况下。要修改配置文件,取消登录

uc_clientdatacacheapps.php

 

5.升级前的相关了解

http://www.discuz.net/thread-2487956-1-1.html
http://www.discuz.net/thread-2250465-1-4.html
6.了解前后的区别 ,如果功能性的东西不大,让朋友考虑是否继续升级。因为升级的东西,都是有隐性的bug,这些一般短时间内不会发现,但是又很危险。不过不升级又一堆bug哈哈。
http://www.discuz.net/thread-2622033-1-1.html

7.使用dz原版项目测试更新和检查。了解下具体的流程,出问题也好判断哪里不同

实际操作

使用实际项目更新和检查

注意,要先关闭站点:否则表冲突,升级前请关闭所有插件和水印,风格恢复默认。
过程:
1.失败,到达某链接后终止
http://www.discuz.net/thread-2290207-2-1.html
2.尝试了网上各种方式,无果。直接研究代码。结果又动了。之间代码覆盖n次,又重复运行。强烈建议监控apache内存和mysql的链接数。这些到顶时,会容易卡死,特别是对于大数据的站长。必要时重启。
3.捣鼓了一晚,终于成功了。Y(^_^)Y
4.恢复相关portal页面
5.开启插件。检查。暂时没有问题。
总结:
之所以这次写得像流程一样,只是为了记录相关操作和记录相关提示。方便日后有相同问题的朋友有类似的问题时可以在这里找到启发。
转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

discuz 中扩充session的值

原因:

1、discuz的特殊机制,只能保存特定类型的session,而常常在二次开发及插件和别的开发的使用中,光这几个变量是不够用的。

2、每个变量总有他存在的特殊意义,而一般像文章数,掏帖数,如果每次要用再去读数据库是很耗资源的。

实现:

1、在表pre_common_session中追加自己的字段(注:不能用text类型)

2、在/discuz/source/class/discuz/discuz_session.php

的(line 19)$newguest的变量加追加,要变量的默认值。

测试:

1、C::app()->session->set(“testval”,”caihaibin2″);

2、在第二次读的过程中可以正常读取该变量
转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

异页面调用hooks方法

discuz中的hook是一个很有意思的创新,俗称钩子。

hook,实际上是对应的hook 点是在入口文件加载数据,在对应的hook点以字符串的形式输出。在模板中的使用的方式为:

<!–{hook/index_top}–>

处理相关脚本的核心函数为:

function_core.php

function hookscript($script, $hscript, $type = ‘funcs’, $param = array(), $func = ”, $scriptextra = ”);

系统原调用的操作方式为:

runhooks();

每个入口文件里几乎都有,为当前入口和动作,调用对应的相关的hook。

也就是通过hookscript这个函数处理。

所以如果我想在portal的首页调用forum的index的钩子,那就会有问题,没有执行。导致在protal模板中输出的<!–{hook/index_top}–> 为空。

知道来由就好说了。

现在再再运行的过程中的,我自己手动调用相关的函数,自己伪造下页面和入口。

即:

runhooks();//我不去除的主要原因是每个页面都有自己的默认钩子,如全局的头和脚.
hookscript(“index”,”forum”);//这个就是咱们要的部分了。

这就是异页面调用钩子的方式了。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

 

解决qq绑定和游客的限制问题

前阵子为某公司架设一个内部使用的discuz论坛,当然,也改了一些别的东西,如页面啦,导航啦,登录啦,注册的lamp验证什么的。等等。
其中有一个特别得注意的地方,就是限制了游客,也就是用户guest权限的用户的访问。
因为该论坛为内部使用,所以游客什么的必须得登录后才能进行访问。
问题来了,对方要用实现qq绑定登录,他那边不知是摸不到头脑还是咋滴,让这边处理(好待在国内也是一个大公司的说..)。
针对问题,查找原因。主要是因为限制了游客后,在判断的时候,就简单的进行了过滤,导致qq还没有生成绑定处理的链接什么的,就直接弹回了登录页面。
代码如下

找到原因就好处理了,因为在过滤的时候没有考虑插件的因素,或者本身设计就不考虑这方面的。。

在圈中的地方,就是表示跳过的入口文件,添加上connect这个特殊的东东就好了。
因为本身不是专门做这些的,只是有问题处理问题,如果有思想和逻辑上的缺漏,请及时提出。

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827

主题分类

一、表结构
二、设置
三、数据提取
1、$_G[‘forum’][threadtypes][types](当前模块中类型的集合)
2、原数据获取
//获取当前的板块的数据
$forum = C::t(‘forum_forum’)->fetch_info_by_fid($fid);
//将序列化后的主题类型进行反序列化。即得到了对应的该板块的主题类型
$types=!empty($forum[‘threadtypes’]) ? dunserialize($forum[$key]) : array();
四、代码剖析

转发请注明出处http://blog.martoo.cn
如有漏缺,请联系我 QQ 243008827