## 用戶行為設計
用戶行為
> 用戶行為是記錄用戶操作,繼而生成日志的操作。在記錄日志的同時,也可以操作一些數據,如用戶積分的增減。
> 用戶在網站的每一個操作都可以看成一個行為,例如:登錄、評論、發布文章……
在什么情況下需要定義行為:
> 對某張表的某個字段值的修改是不確定的,且修改操作是由系統自動執行的
用戶行為規則
~~~
# 規則定義 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)
> 函數是已定義的公共函數。變量將會傳遞給函數的第一個參數。
> 該函數一般需要返回處理過的結果,用于日志變量的替換。