Discuz X2 帖子审核提醒 开启

由于各种已知的原因,论坛是需要审核发帖的,但是discuz的自带提醒需要一个个的添加:

后台——站长——后台管理团队——管理提醒
中可以设置

本次修改可以实现的功能:

1、自动获取相应版块的版主列表

2、当有需要的审核帖发布时发送提醒给版主

截图:

image

需要修改的地方:

1、增加一个提醒模板:

sourcelanguagelang_notification.php

在最后一行增加代码:

	'system_thread_validating' => '有需要您审核的帖子呢!,点开这里看看吧,现在进行审核
{actor}在{area}发表{subject}',

image

2、增加发帖判断:

sourceincludepostpost_newthread.php

在大概378行后面增加代码:

	/*检查是否是需要审核贴,发送到相应版主 start*/
	if($displayorder == -2){
		//获取该区的版主列表
		$query = DB::query("SELECT uid FROM ".DB::table('forum_moderator')." WHERE fid=".$_G[fid]);
		while($moderator=DB::fetch($query)) {
			notification_add($moderator['uid'], 'system', 'system_thread_validating', array('fid'=>$fid,'uid'=>$_G['uid'],'actor'=>$_G['username'],'area'=>$_G['forum']['name'],'subject'=>$subject), 1);
		}
	}
	/*检查是否是需要审核贴,发送到相应版主 end*/

image

KISSY1.2.0学习笔记-3

namespace {Object} 方法

作用:设置一个命名空间,返回创建的对象

参数:

{String} 命名空间名字

{Boolean} 是否全局变量

举例:

KISSY.namespace('KISSY.app'); // returns KISSY.appKISSY.namespace('app.Shop'); // returns KISSY.app.ShopKISSY.namespace('TB.app.Shop', true); // returns TB.app.Shop

app {Object} 方法

作用:方法,返回一个新的对象,这个对象基于app,有基本的一些KISSY方法,比如use、add、getScript、namespace

参数:

{String} 名称

{Object} 需要添加的静态方法

举例:

KISSY.app('xyz');KISSY.app('ttt',{a:1,b:2});

log 方法

作用:输出东西到控制台,主要用于调试,一得要开启ks-debug才会有效 善用error可以比较好的调试,error会输出当前调用的堆栈

参数:

{String} msg 要输出的内容

{String} cat 日志类型(”info”, “warn”, “error”, “time”等等)(可选)

{String} src  来源,会在输出的日志前面加上一个前缀  

举例:

KISSY.log('test');//test
KISSY.log('test','warn');//多一个红色的图标test
KISSY.log('test','error','form xx');//from xx:test

error

作用:抛出一个异常,throw的封装,同样需要开启ks-debug

参数:

{String} msg 要输出的内容

举例: 就不举例了

 

kissy的seed/kissy.js方法就分析完毕,后续会有更多的高级方法介绍。

KISSY1.2.0学习笔记-2

version {String} 属性

作用:属性,返回KISSY的版本号

参数:无

举例:

Code:

KISSY.version;//1.1.6

buildTime {String} 属性

作用:属性,返回KISSY的打包时间

参数:无

举例:

KISSY.buildTime;// 20110825162101

merge {Object} function(a1,a2,a3……)

作用:将所传的对象一次合并,并返回一个新的对象

说明:这个函数是调用mix方法来多次合并对象,不会覆盖前面对象的属性,主要用于简单的对象合并

参数:{Object} a1 对象

举例:

var a1 = {a:1,b:2},a2 = {a:2,c:3};
KISSY.merge(a1,a2);//{a:1,b:2,c:3}
KISSY.merge(a2,a1);//{a:2,b:2,c:3}

augment {Object} function(/*r, s1, s2, …, ov, wl*/)

作用:将s1,s2……的原型(prototype,如果没有就复制成员)复制到r上面

说明:这个函数也是由mix方法派生出来的,但是和merge相比会复制原型链,主要用于方法类的复制。

参数:

{Function} r 目标对象

{Function|Object} s1(s2……) 源对象

{Boolean} ov 是否是覆盖模式(override),如果r存在A属性,那么是否要用s的A属性覆盖之,默认为false

{Array} wl 白名单(write List),如果非空就只拷贝wl数组里面的属性

举例:

function animal(){
this.name= ‘animal’;
this.eat = function(){};
this.say=function(){alert(‘miaomiao’);}
}
KISSY.augment(animal,{color:’white’});
new animal();//此时已经有color属性了

extend {Object} function(r, s, px, sx)

作用:将s1,s2……的原型(prototype,如果没有就复制成员)复制到r上面

说明:这个函数也是由mix方法派生出来的,但是和merge相比会复制原型链,主要用于方法类的复制。

参数:

{Function} r 目标对象

{Function } s 需要继承的对象

{Object} px 需要添加(或者覆盖)到原型链(prototype)的参数列表

{Object} sx 需要直接添加(或者覆盖)的方法列表

举例:

function Animal(){}
Animal.prototype.name= ‘animal’;
Animal.prototype.eat = function(){};
Animal.prototype.say=function(){alert(‘miaomiao’);}
function Cat(){}
Cat.name=‘mimi’;
KISSY.extend(Cat,Animal);
new Cat();//此时已经有color属性了
 

主要是三个重要的方法:merge、augment、extend这是面向对象编程的重要方法,这三个方法在不同的场合使用,有些时候可以通用。细节还是要多多体会。

KISSY1.2.0学习笔记-1

KISSY的组件是很丰富的,功能也和jQuery接近,但是KISSY的互联网文档除了官方文档就没有其他地方可以找到了。

KISSY的seed文件夹是基础函数,是KISSY的基本方法,所有的东西都是基于这些搭建。

/seed/kissy.js

作用:

1. 在页面中产生KISSY对象,闭包(mix函数的实现见下文)

(function(S, undefined) {
	var host = this;//此时的this为window对象
	host[S] = {};
)('KISSY', undefined);

2. 定义基本的方法(mix,merge,augment,extend,namespace,app,config,log,error,guid,__init)和属性(version,buildTime)

说明:

通过首先定义mix方法产生一个KISSY对象,然后再通过mix方法添加其余的属性和方法。在后面会有很多使用mix的地方。

方法:

  • · mix {Object} function(r, s, ov, wl, deep)

作用:将s的所有属性拷贝到r上,并返回增加属性后的r

参数:

    {Object} r 目标对象

  •     {Object} s 源对象
  •     {Boolean} ov 是否是覆盖模式(override),如果r存在A属性,那么是否要用s的A属性覆盖之,默认为false
  •     {Array} wl 白名单(writeList),如果非空就只拷贝数组里面的属性
  •     {Boolean} deep 深拷贝(区别于引用拷贝),设置这个为true且s为数组或者是PlainObject(对象是{}产生成为PlainObject)则进行深拷贝。默认false

举例:

var src = {a:1,b:2},dest = {a:2,c:3};
KISSY.mix(dest,src); //dest == {a:1,b:2,c:3}
KISSY.mix(dest,src,true);//dest == {a:1,b:2,c:3}
KISSY.mix(dest,src,true,[‘a’]);//dest == {a:1,b:2,c:3}

一个价格效验引出的血案

测试是很牛逼的,某天写了一个判断

function testPrice(val){
	return Math.floor(val/0.01) == val/0.01;
}

就是这么一个小东西,目的是限制价格位数只能为2位

如果

val = 2.123;

那么testPrice就返回false了

看起来逻辑完全没有问题,

但是测试的一个数字:2.22

testPrice(2.22) == false!!

一阵迷茫这后很快发现问题了~

可能是计算机储存数据丢失精度了~

firebug 检查一下

image

果然是,换成乘法也应该是会错误的

image

至于为什么会出现精度丢失这个就属于计算机基础知识了,就不多说了

果断把算法换了

正在表达式还是最靠谱的,附上一个更强的正则(包括效验长度,大小,限制数字)

/^[1-9]d{0,7}$|^0.d{1,2}$|^[1-9]d{0,7}.d{1,2}$/