Skocz do zawartości


- - - - -

Sychronizacja dwóch forów opartych na IP.Board


  • Nie możesz odpowiedzieć
Brak odpowiedzi do tego tematu

#1 DawPi

    ...a wy Pragnienie™

  • Manager
  • 49520 postów
  • Wersja:IP.Board 3.2.3

Napisano 21 grudzień 2007 - 18:22

Artykuł ten pokaże jak w prosty sposób zsychronizować dwa fora oparte na IP.Board.

Info wstępne: istnieją dwa fora: forum A i forum B.

By zsynchronizować forum A z B postępuj wg poniższej instrukcji.

pliki forum A:
Otwórz plik conf_global.php
Znajdź:
$INFO['sql_host']			=	'localhost';
$INFO['sql_database']			=	'ForumsA';
$INFO['sql_user']			=	'ForumsA';
$INFO['sql_pass']			=	'ForumsA';
$INFO['sql_tbl_prefix']			=	'ibf_';
Dodaj niżej:
$INFO['sql_host2']			=	'localhost';
$INFO['sql_database2']			=	'ForumsB';
$INFO['sql_user2']			=	'ForumsB';
$INFO['sql_pass2']			=	'ForumsB';
$INFO['sql_tbl_prefix2']			=	'ibf_';

Zapisz i wyślij.

Otwórz plik: modules/ipb_member_sync.php
znajdź:
function on_create_account($member, $converge)
	{
		global $ipsclass;
Dodaj poniżej:
		$ipsclass->DB2 = new db_driver;
 
		$ipsclass->DB2->obj['sql_database']     = $ipsclass->vars['sql_database2'];
		$ipsclass->DB2->obj['sql_user']	     = $ipsclass->vars['sql_user2'];
		$ipsclass->DB2->obj['sql_pass']	     = $ipsclass->vars['sql_pass2'];
		$ipsclass->DB2->obj['sql_host']	     = $ipsclass->vars['sql_host2'];
		$ipsclass->DB2->obj['sql_tbl_prefix']   = $ipsclass->vars['sql_tbl_prefix2'];
		$ipsclass->DB2->obj['use_shutdown']     = USE_SHUTDOWN;
		$ipsclass->DB2->connect();
 
		$ipsclass->DB2->do_insert( 'members_converge', $converge );
 
		//-----------------------------------------
		// Insert: MEMBERS
		//-----------------------------------------
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'id','from'=>'members','where'=>"id=".$this->ipsclass->member['id']));
	if($check['id'])
	{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
		$this->ipsclass->lang['asdf'] = "";
		$this->ipsclass->Error(array('MSG'=>'User ID w użyciu!'));
	}
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'name','from'=>'members','where'=>"name=".$this->ipsclass->member['name']));
	if($check['name'])
	{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
		$this->ipsclass->lang['asdf'] = "";
		$this->ipsclass->Error(array('MSG'=>'Login usera w użyciu!'));
	}
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'members_display_name','from'=>'members','where'=>"members_display_name=".$this->ipsclass->member['members_display_name']));
	if($check['members_display_name'])
	{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
		$this->ipsclass->lang['asdf'] = "";
		$this->ipsclass->Error(array('MSG'=>'Nazwa wyświetlana usera w użyciu!'));
	}
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'email','from'=>'members','where'=>"id=".$this->ipsclass->member['email']));
	if($check['email'])
	{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
		$this->ipsclass->lang['asdf'] = "";
		$this->ipsclass->Error(array('MSG'=>'Email Usera w użyciu!'));
	}
 
		$ipsclass->DB2->force_data_type = array( 'name' => 'string' );
		$ipsclass->DB2->do_insert( 'members', $member );
	   
		$ipsclass->DB2->close_db();

Zapisz i wyślij.

Otwórz plik: sources/action_public/register.php
Znajdź:
$member['password'] = trim($this->ipsclass->input['PassWord']);
		   
			$this->modules->on_create_account($member);
Zamień na:
$this->modules->on_create_account($member, $converge); $member['password'] = trim($this->ipsclass->input['PassWord']);

Zapisz i wyślij.

Te zmiany mają na celu zapisywanie informacji o userach z forum A do bazy forum B.

Otwórz plik: modules/ipb_member_sync.php
Znajdź:
	function on_group_change( $id, $new_group )
	{
		global $ipsclass;
			     if ($new_group != 3) {
				       return;
			  	}
		//---- START

Dodaj poniżej:
		$ipsclass->DB2 = new db_driver;
 
		$ipsclass->DB2->obj['sql_database']     = $ipsclass->vars['sql_database2'];
		$ipsclass->DB2->obj['sql_user']	     = $ipsclass->vars['sql_user2'];
		$ipsclass->DB2->obj['sql_pass']	     = $ipsclass->vars['sql_pass2'];
		$ipsclass->DB2->obj['sql_host']	     = $ipsclass->vars['sql_host2'];
		$ipsclass->DB2->obj['sql_tbl_prefix']   = $ipsclass->vars['sql_tbl_prefix2'];
		$ipsclass->DB2->obj['use_shutdown']     = USE_SHUTDOWN;
		$ipsclass->DB2->connect();
 
		$ipsclass->DB2->do_update( 'members', array( 'mgroup' => intval($new_group) ), 'id='.intval($id) );
		$uptime = time()+300;
		$ipsclass->DB2->do_update('task_manager', array('task_next_run' => $uptime), 'task_id=3');
 
		$ipsclass->DB2->close_db();
Zapisz i wyślij.
Te zmiany powodują, że przy zmianie grupy usera w forum A zmienia się w forum B.

Jeśli chcesz zsynchronizować forum B z A wykonaj te same czynności na jego plikach.

Enjoy!
intermedia - profesjonalne rozwiązania Invision Power Board





Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych