喜悦国际村 » 喜悦原创 » Mambo/Joomla!下实现多系统桥接的方法

页: [1]
hoping2006-10-9 03:31 PM
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值的统一。

sadly2006-10-10 02:50 AM
此文章非首发
[url]http://cache.baidu.com/c?word=mambo%2Cjoomla%2C%CF%C2%3B%CA%B5%CF%D6%3B%B6%E0%3B%CF%B5%CD%B3%3B%C7%C5%3B%BD%D3%3B%B5%C4%3B%B7%BD%B7%A8&url=http%3A//htmambo%2Ecom/html/content/view28%2Ehtml&b=54&a=16&user=baidu[/url]


[url]http://www.baidu.com/baidu?word=Mambo%2FJoomla%21%CF%C2%CA%B5%CF%D6%B6%E0%CF%B5%CD%B3%C7%C5%BD%D3%B5%C4%B7%BD%B7%A8&tn=myie2dg[/url]

菜鸟也要有理想2006-10-10 11:20 PM
村长是用MYIE2的

hgaoping2006-10-15 08:51 AM
声明一下,此人的ID和我很像,大家不要误解呀。

hoping2006-10-17 02:58 AM
[quote]原帖由 [i]sadly[/i] 于 2006-10-10 10:50 AM 发表
此文章非首发
[url]http://cache.baidu.com/c?word=mambo%2Cjoomla%2C%CF%C2%3B%CA%B5%CF%D6%3B%B6%E0%3B%CF%B5%CD%B3%3B%C7%C5%3B%BD%D3%3B%B5%C4%3B%B7%BD%B7%A8&url=http%3A//htmambo%2Ecom/html/content/view[/url] ... [/quote]
哦,得首发才行啊:(


查看完整版本: Mambo/Joomla!下实现多系统桥接的方法


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.006008 second(s), 2 queries