discuz撰写的日志

解决Discuz编辑器在Chrome/Opera/Firefox下的使用问题

在Chrome中使用Discuz编辑器(Discuz6.0,Discuz6.1,Discuz7.0都存在这样的问题)的过程中可能遇到以下两个错误:

1.直接使用Discuz编辑器的所见即所得模式时:
Uncaught TypeError: Cannot call method ‘appendChild’ of /include/javascript/editor.js:129 undefined

2.将Discuz编辑器从代码模式切换到所见即所得模式时(无法切换):
Uncaught TypeError: Cannot call method ‘replace’ of /include/javascript/bbcode.js:387 undefined

第一个错误的出现在editor.js文件中的function setEditorStyle()函数中,解决办法是在
    var headNode = editdoc.getElementsByTagName("head")[0];
    headNode.appendChild(editcss);
中间加入:
    if(!headNode){headNode = editdoc.getElementsByTagName("body")[0];}//by ZZR

第二个错误实际是出现在bbcode.js文件中的function bbcode2html(str)函数中,原因是Chrome、Firefox中对函数的处理有点不一样,函数的最后一个元素是push。解决办法是在:
    re = new RegExp(addslashes(smilies[id]['code']), "g");
的前面加入:
    if(isNaN(parseInt(id))) continue; //by ZZR

想偷懒的朋友,并且Discuz论坛版本为6.0的朋友可以直接下载www.zxlm.cn/fh/中对应的JS文件。

PS:BS一下Discuz的JS开发人员!

最后传一个第一个错误的效果图。

图片附件:
discuz-editor-error-01.png

Discuz论坛实现Span检测功能(集成Akismet)

通过Akismet对PHP Discuz论坛的新帖子或者新回复进行检测,防止垃圾信息的生成。

大体思路如下:

1.使用Akismet提供的API对信息进行检测;

2.对信息的检测只针对特定的用户组,比如“新手上路”、分低于200或者发贴量少于50个帖子的用户,做此限制主要是为了不影响论坛的忠实支持者的操作;

3.用户提交的内容检测为Span时,阻止发贴、回复的操作,并提示用户,并记录用户提交垃圾信息的数次,当达到一定程序时将此用户禁言一定时间;

4.相关参数在后台实现设置接口。

5.在Discuz管理后台设置API Key,并检测API Key的有效性。

Akismet工作原理简介:当有一个评论时,插件会把它递交给Akismet服务器,那里有一张黑名单,如果评论榜上有名,那么就会自动被默认为Spam。如果被误认为Spam,你可以恢复它。

Akismet的开发文档:Akismet API Documentation

Discuz NT论坛日志引起的无法访问

由Discuz NT构建的论坛,出现无法访问的情况,页面提示“与SQL Server 2000 的连接超时”

重启IIS,SQL Server都不起作用,检查数据库后发现论坛所使用的数据库 Discuz_NT 的日志文件的体积居然达到 23.5GB

将SQL Server的日志清理后,论坛恢复正常。

随后简单分析了一下SQL Server产生如此大日志的原因:

1.因为数据库Discuz_NT的故障还原模型为“完全”,从而在用户访问论坛、访问版块、访问帖子时都会有日志生成(在dnt_online中记录访问者的位置)

2.用户每访问一个帖子都会更改数据库中dnt_posts1中记录的帖子被访问的次数

综合以上的原因,从而使数据库的日志迅速增大。因此对于 Discuz NT 构建的论坛有必要经常清理日志、备份数据。

当然将数据库的故障还原模型(如何记录日志)设置为简单能够防止产生如此大量的日志,但是无法保证数据的安全。

 

如果在数据库中限制了日志的大小,那么出来的提示如下:

数据库 ‘Discuz_NT ‘ 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: 数据库 ‘Discuz_NT ‘ 的日志已满。请备份该数据库的事务日志以释放一些日志空间。

解决支付宝与Discuz!论坛接口问题HAS_NO_PRIVILEGE

Discuz!论坛使用支付宝求购时出现如下提示:

调试错误,请回到请求来源地,重新发起请求.
错误代码HAS_NO_PRIVILEGE

说明:如果您不是因为本接口集成调试而看见该错误提醒,请联系本次请求来源网站,本错误属于网站集成接口的错误。

具体的原因可以参考:支付宝关上网站集成服务的免费之门

通过修改Discuz!支付宝的API终于将此问题解决.

主要原因是Discuz!的API中原来集成的信息无法免费使用:

交易安全校验码(key):gh0bis45h89m5mwcoe85us4qrwispes0
合作者身份(partnerID):2088002052150939

所以通过修改解密的支付宝API(Discuz6支付宝API解密版)(alipayapi.php)中的这两个参数:

define( "DISCUZ_PARTNER", "2088002052150939" );
define( "DISCUZ_SECURITYCODE", "gh0bis45h89m5mwcoe85us4qrwispes0" );

即可解决"错误代码HAS_NO_PRIVILEGE"的问题,如:解决支付宝与Discuz!论坛接口问题HAS_NO_PRIVILEGE

或者使用Discuz!官方发布的Discuz!支付宝API补丁:6.0的支付宝接口升级文件

 

支付宝关上网站集成服务的免费之门

Discuz论坛的积分充值功能突然无法使用,提示如下错误:不能充值 有错误提示

调试错误,请回到请求来源地,重新发起请求。
错误代码HAS_NO_PRIVILEGE
说明:如果您不是因为本接口集成调试而看见该错误提醒,请联系本次请求来源网站,本错误属于网站集成接口的错误.

查找相关资料后发现错误代码HASH_NO_PRIVILEGE 表示交易服务没有申请,如:只申请了“实物商品交易服务”,但订单中的商品是虚拟物品,这时必须申请“虚拟商品交易服务".

登录支付宝后发现"网站集成支付宝"中增加了一个"销售型网站",申请后发现接口已经不再免费了:

 

产品类型: 标准双接口600包42000
技术服务费:预交600元,在12个月内,可走合作交易流量42000元 ,超量后单笔费率 1.5 %
签约方式: 支付宝网站用户自助创建的默认费率合同

 

支付宝在免费集成到 Discuz 论坛取得大量用户后,终于按捺不住圈钱的诱惑放绝招了.

不过现在支付宝的"网上赠与服务"仍旧免费,考虑替换Discuz原有的积分充值功能.

为Discuz6中未设置Tag的主题自动生成Tag

从Discuz论坛程序6.0开始,论坛主题开支持Tag,使得论坛帖子之间的相关性和用户之间的交互性大大增强。
但是我们论坛中以前的帖子怎么办呢?
所以我想到写这样一个脚本,来为Discuz6中未设置Tag的主题自动生成Tag。

2007-01-17日更新内容,增加帖子最大Tag的数量控制及随机Tag

下载最新版本:

附件:2008-01-17-tagcreate.zip(2811 Byte)

更新内容:

//允许每个帖子的最大Tag个数,最大为5个。
$tagmax = 5;

//随机生成帖子的最多Tag个数
//false 表示为每个帖子生成 $tagmax 个标签。
//true  表示为每个帖子生成小于$tagmax 大于0 个标签。
$tagradom = false;

//用于生成Tag的内容,是否随机截取。
//false表示每个帖子都是取标题和帖子的前512个字符生成Tag
//true 表示取帖子标题和帖子内容中的随机的512个字符生成Tag
$contentradom = false;

$tpp = 15;    //允许程序每次处理的主题数目。

先让我们了解一下什么是Tag?

  Tag(中文叫做“标签”) 是一种新的组织和管理在线信息的方式。它不同于传统的、针对文件本身的关键字检索,而是一种模糊化、智能化的分类。 Tag是一种更为灵活、有趣的分类方式,您可以为每篇日志、每个帖子或者每张图片等添加一个或多个Tag(标签),你可以看到网站上所有和您使用了相同 Tag的内容,由此和他人产生更多的联系。Tag体现了群体的力量,使得内容之间的相关性和用户之间的交互性大大增强。

脚本见附件。

只需要把tagcreate.php放到论坛的根上好,然后在浏览器中打开就可以了。

脚本默认为每次设置15个主题的帖子。所以运行的时间会比较长。

$tpp = 15;    //允许程序每次处理的主题数目。

脚本未对权限进行判断,所以大家最好在生成Tags后,删除此文件。

附件:tagcreate.zip(2550 Byte)