hoping
新手上路

初级会员
UID 63716
精华
0
积分 8
帖子 10
金钱 8 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-3-25
状态 离线
|
Mambo/Joomla!下实现多系统桥接的方法
设计思路:利用原Joomla/Mambo的“触发器”原理,在对用户表进行相应操作时均做一触发器事件,其中包括:
1.注册
2.登录
3.注销
4.更新
5.删除
6.检查重名
7.获取最小可用的用户ID值
下面开始详述上述功能的实现方法(注:此方法同样适用于Mambo)。为避免叙述重复,请在下文中所列的函数名的global里包含一条$_MAMBOTS,即global (...),$_MAMBOTS;,其中,(...)代表的是原语句。
一、登录:
文件名:joomla.php/mambo.php
类名:mosMainFrame
函数名:function login(......
原文语句:
if ($row->block == 1) {
mosErrorAlert(_LOGIN_BLOCKED);
}
此段内容下添加:
$_MAMBOTS->loadBotGroup( 'user' );
$results = $_MAMBOTS->trigger( 'onLogin', array( &$row ), true );
if(is_array($results))
foreach($results as $v){
if($v!=1)
mosErrorAlert(_LOGIN_INCORRECT);
}
这里$results为一数组,每元素中的值为被桥接系统中关于该用户信息是否匹配的状态。如果有任意一个系统不能与需要登录的信息匹配,则登录失败!
二、注销:
文件名:joomla.php/mambo.php
类名:mosMainFrame
函数名:function logout()
原文语句:
mosCache::cleanCache();
在此行上一行添加:
$_MAMBOTS->loadBotGroup( 'user' );
$results = $_MAMBOTS->trigger( 'onLogout', array( &$row, &$params ), true );
这里将会直接按照当前用户的用户名在被桥接系统中依次进行注销。无需返回值。
三、注册:
文件名:joomla.php/mambo.php
类名:mosUser
函数名:function store(...
原文语句:
} else {
// new record
在此段内容下添加:
$_MAMBOTS->loadBotGroup( 'user' );
$result = $_MAMBOTS->trigger( 'onGetID');
$maxid=0;
foreach($result as $v){
if ($v > $maxid) $maxid=$v;
}
$maxid=$maxid+1;
$kname=$this->_tbl_key;
$this->$kname=$maxid;
$_MAMBOTS->loadBotGroup( 'user' );
$results = $_MAMBOTS->trigger( 'onRegister', array( &$this ), true );
foreach($results as $v){
if(!$v) {
$_MAMBOTS->trigger( 'onRegister', array( $maxid ), true );
return false;
}
}
if(!$results) return false;
这里的$results为一数组,分别保存的是被桥接系统对用户注册信息的保存情况。如果有任意一个系统保存失败,则注册失败!
四、检查重名(重复email)以及由系统设置的其它限制项目:
文件名:joomla.php/mambo.php
类名:mosUser
函数名:function check()
原文语句:
return true;
在此句上一行添加以下内容:
$_MAMBOTS->loadBotGroup( 'user' );
$results = $_MAMBOTS->trigger( 'onCheck', array( &$this ), true );
foreach($results as $v){
if(!$v) return false;
}
if(!$results) return false;
这里的$this是当前需要检查的用户相关信息,如用户名、密码、邮件等。同样,如果有任意一个系统检查出错(重名/重邮件),则不能继续注册。
五、更新资料
文件名:joomla.php/mambo.php
类名:mosUser
函数名:function store(...
原文语句:
$ret = $this->_db->updateObject( $this->_tbl, $this, $this->_tbl_key, $updateNulls );
在此句下一行添加以下内容:
$_MAMBOTS->loadBotGroup( 'user' );
$_MAMBOTS->trigger( 'onUpdate', array( &$this ), true );
更新时不对返回结果进行检测。
六、删除用户
文件名:joomla.php/mambo.php
类名:mosUser
函数名:function delete(...
原文语句:
return true;
在此句上一行添加:
$_MAMBOTS->loadBotGroup( 'user' );
$_MAMBOTS->trigger( 'onDelete',array($this->$k));
这里,在注册时还需要进行一项检查,即最小可用的用户ID值的获取。做这一项检查主要是为了确保每个系统中的用户ID值是相同地,这样便于进行用户资料的删除、更新等操作!
当注册失败时需要自动触“删除用户”事件。这样可以确保每套系统所使用的用户基本资料是相同地。
这里得指出一点Joomla/Mambo系统中的不足,如果删除多个用户时,它是“逐个”进行删除地,而不是批量来进行。很是不足!
七、获取最小可用的用户ID值
文件名:无,请参照“三、注册”
此功能仅在系统功能中进行调用,详细的修改请参阅前述功能。主要是为了实现多系统之间用户ID值的统一。
|
|