discuz3.3註冊入口位址為:member.php?mod=register
一.member.php:
開啟之後,**非常簡單。
其中有一句:
1$mod = !in_array($discuz->var['mod'], $modarray) && (!preg_match('/^\w+$/', $discuz->var['mod']) || !file_exists(discuz_root.'./source/module/member/member_'.$discuz->var['mod'].'.php')) ? 'register' : $discuz->var['mod'];
這一句裡面的 $discuz->var['mod']**,有專門的技術貼分析:
1require libfile('function/member');//
載入menber 函式
2require libfile('class/member');//
載入menber 類庫
3 runhooks(); //
執行hook點45
require discuz_root.'./source/module/member/member_'.$mod.'.php';//
載入member_register.php頁面。
從這裡面來看,主要註冊程式頁為:source/module/member/member_register.php頁面。
二.source/module/member/member_register.php:
if(!defined('in_discuz'))//**檢測
define('norobot', true
);$ctl_obj = new register_ctl();//
例項化register_ctl類
$ctl_obj->setting = $_g['setting'];//
獲取全域性變數中setting值
$ctl_obj->template = 'member/register';//
載入模板template\default\member\register.htm
$ctl_obj->on_register();//
執行on_register函式
註冊執行的主函式為:register_ctl類中的on_register(),register_ctl類的位置是:source/class/class_member.php檔案中。這個檔案在第一部分已經通重載入類庫方式載入。
三.source/class/class_member.php:
functionregister_ctl(){}
function on_register(){}
這個檔案只有這兩個函式,register_ctl(){}初始化,載入相關類庫。on_register()註冊程式。
註冊程式很長,選幾個關鍵點來看:
大約700行左右(這個程式頁面我稍微修改過,跟官方原版略有區別):
if(!$activation)
**很簡單,呼叫了call_user_func()方法實現了多介面復用。其中引數:
uc_api_func引數在該頁面頭部定義了:
define('uc_api_func', uc_connect == 'mysql' ? 'uc_api_mysql' : 'uc_api_post');//在我這邊連線方式是mysql,根據配置,也可以使用api post方式傳送使用者註冊資訊。
uc_api_mysql()函式,在本頁面上部定義了:
function uc_api_mysql($model, $action, $args=array())
else
include_once uc_root.'./model/base.php';
include_once uc_root."./control/$model.php";
eval("\$uc_controls['$model'] = new control();");
}if($action != '_')
else
}
include_once uc_root."./control/$model.php";表示載入/control/user.php模組。
$action = 'on'.$action;表示呼叫函式onregister();
五.uc_client\control\user.php:
functiononregister()
if(($status = $this->_check_email($email)) < 0)
$uid = $_env['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip, $fromuser);//
這一行是我修改的推薦人賬號傳參。
return
$uid
; }
$_env是php中的乙個包含伺服器端環境變數的陣列。它是php中乙個超級全域性變數,我們可以在php程式的任何地方直接訪問它。
在 uc_client/model/base.php 中,使用了load()方法定義了 $_env[$model] 並賦值。
function load($model, $base = null)
return
$_env[$model
];}
這裡的作用,我們不深究,知道這裡呼叫的是uc_root."./model/user.php中的add_user()方法。
六.uc_client/model/user.php:
大約l129:
function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '', $fromuser = '')
所有需要修改的部分就完成了。總共涉及6個頁面。
窗體程式修改
見第乙個窗體程式 兌現承諾!程式修改說明 依然沒有對介面進行優化,但那是遲早的事,首先考慮的當然是功能完善。1 把布局再調整一下,按鍵部分確定為0 9,退格,機選1注,機選5注 清除1 清除5。2 為0 9及退格按鈕設定對應的響應函式click,command命令用lambda函式動態捕捉0 9及退...
java 程式修改系統時間
runtime.getruntime exec cmd c date 2013 05 06 windows 系統 runtime.getruntime exec cmd c time 22 35 00 windows 系統runtime.getruntime exec sudo date s 201...
魔獸改鍵程式修改
前兩天的改鍵程式修改後基本可用,貼 using system using system.collections.generic using system.runtime.interopservices using system.windows.forms namespace war3keywizar...