## 用户行为设计
用户行为
> 用户行为是记录用户操作,继而生成日志的操作。在记录日志的同时,也可以操作一些数据,如用户积分的增减。
> 用户在网站的每一个操作都可以看成一个行为,例如:登录、评论、发布文章……
在什么情况下需要定义行为:
> 对某张表的某个字段值的修改是不确定的,且修改操作是由系统自动执行的
用户行为规则
~~~
# 规则定义 table:$table|field:$field|condition:$condition|rule:$rule[|cycle:$cycle|max:$max][;......]
# 规则字段解释:table->要操作的数据表,不需要加表前缀;
# field->要操作的字段;
# condition->操作的条件,目前支持字符串,默认变量{$self}为执行行为的用户,解析行为时会进行替换
# rule->对字段进行的具体操作,目前支持四则混合运算,如:1+score*2/2-3
# cycle->执行周期,单位(小时),表示$cycle小时内最多执行$max次
# max->单个周期内的最大执行次数($cycle和$max必须同时定义,否则无效)
# 单个行为后可加 ; 连接其他规则
~~~
示例:table:member|field:score|condition:uid={$self} AND status>-1|rule:9-2+3+score*1/1|cycle:24|max:1;
表示修改think_member表的score字段,修改条件为'uid={$self} AND status>-1',修改的值为9-2+3+score*1/1,每24个小时最多执行一次
用TP的写法来表示:D('Member')->where("uid={$self} AND status>-1")->setField('score', '9-2+3+score*1/1');
行为日志规则
> 如何记录行为日志的备注由该行为定义,如果未定义则只记录操作URL。
> 日志规则里可以使用变量和函数。使用方式:[变量名|函数名]
> 目前有如下变量
> user:触发行为的用户编号(uid)
> time:触发行为的时间(NOW_TIME)
> model:触发行为的模型
> record:触发行为的记录编号
> data:上述变量结合的一个数组array('user'=>$user_id,,'model'=>$model,'record'=>$record_id,'time'=>NOW_TIME)
> 函数是已定义的公共函数。变量将会传递给函数的第一个参数。
> 该函数一般需要返回处理过的结果,用于日志变量的替换。