Опубликовано: 29 ноября 200619 г Например есть два форума A и B.. Открываем conf_global.php форума A, находим: $INFO['sql_host'] = 'localhost'; $INFO['sql_database'] = 'ForumsA'; $INFO['sql_user'] = 'ForumsA'; $INFO['sql_pass'] = 'ForumsA'; $INFO['sql_tbl_prefix'] = 'ibf_'; Добавляем ниже: $INFO['sql_host2'] = 'localhost'; $INFO['sql_database2'] = 'ForumsB'; $INFO['sql_user2'] = 'ForumsB'; $INFO['sql_pass2'] = 'ForumsB'; $INFO['sql_tbl_prefix2'] = 'ibf_'; Сохраняем, закачиваем обратно на сервер. Открываем файл ./modules/ipb_member_sync.php, находим: function on_create_account($member, $converge) { global $ipsclass; Добавляем после: $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'=>'Member ID in Use!')); } $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'=>'Member Name in Use!')); } $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'=>'Member Display Name in Use!')); } $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 Address in Use!')); } $ipsclass->DB2->force_data_type = array( 'name' => 'string' ); $ipsclass->DB2->do_insert( 'members', $member ); $ipsclass->DB2->close_db(); Сохраняем, закачиваем обратно на сервер. Открываем файл ./sources/action_public/register.php, ищем: $member['password'] = trim($this->ipsclass->input['PassWord']); $this->modules->on_create_account($member); Меняем на: $this->modules->on_create_account($member, $converge); $member['password'] = trim($this->ipsclass->input['PassWord']); Сохраняем, закачиваем обратно на сервер. Получаем информацию о пользователях из форума A и добавляем ее в базу данных форума B. Открываем файл ./modules/ipb_member_sync.php, находим: function on_group_change( $id, $new_group ) { global $ipsclass; if ($new_group != 3) { return; } //---- START Добавляем после: $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(); Сохраняем.. Это обновление групп форума B, когда пользователю на форуме A изменяют членскую группу. Указанные изменения производят синхронизацию в "одну сторону". Если вы хотите сделать ее для обеих форумов то выполните указания выше и для форума B. Указанным выше методом можно сделать синхронизацию и для трех и для четырех форумов по аналогии. (С) ipsbeyond
Опубликовано: 29 ноября 200619 г Указанные изменения производят синхронизацию в "одну сторону". Если вы хотите сделать ее для обеих форумов то выполните указания выше и для форума B.А если и там и там есть одни и те же пользователи. Или имя пользователя разное, а емейл один?
Опубликовано: 29 ноября 200619 г Автор при новой регистрации с уже использующимся адресом эл. почты и именем должно появиться сообщение об ошибке.
Опубликовано: 29 ноября 200619 г Это понятно. Но есть два форума. Форум А и Б. Которые надо синхронизовать между собой. На обоих форумах есть одни и те же пользователи. На другом форумах человек может зарегистрироваться под другим именем (есть и под тем же именем) но емейл оставить старый. Как произойдет синхронизация таких пользователей? Если логин один и тот же, то один убьется? Если логин разный, то будет два пользователя с одним емейлом? Ситуация реальная.
Опубликовано: 29 ноября 200619 г Автор Если ID найден процесс синхронизации вернет ошибку:"Member ID in Use"Если ID не найден продолжение процесса синхронизации. Также и с почтой и с ником и с отображаемым именем.
Например есть два форума A и B..
Открываем conf_global.php форума A, находим:
Добавляем ниже:
Сохраняем, закачиваем обратно на сервер.
Открываем файл ./modules/ipb_member_sync.php, находим:
function on_create_account($member, $converge) { global $ipsclass;Добавляем после:
$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'=>'Member ID in Use!')); } $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'=>'Member Name in Use!')); } $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'=>'Member Display Name in Use!')); } $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 Address in Use!')); } $ipsclass->DB2->force_data_type = array( 'name' => 'string' ); $ipsclass->DB2->do_insert( 'members', $member ); $ipsclass->DB2->close_db();Сохраняем, закачиваем обратно на сервер.
Открываем файл ./sources/action_public/register.php, ищем:
Меняем на:
Сохраняем, закачиваем обратно на сервер.
Получаем информацию о пользователях из форума A и добавляем ее в базу данных форума B.
Открываем файл ./modules/ipb_member_sync.php, находим:
function on_group_change( $id, $new_group ) { global $ipsclass; if ($new_group != 3) { return; } //---- STARTДобавляем после:
$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();Сохраняем..
Это обновление групп форума B, когда пользователю на форуме A изменяют членскую группу.
Указанные изменения производят синхронизацию в "одну сторону". Если вы хотите сделать ее для обеих форумов то выполните указания выше и для форума B.
Указанным выше методом можно сделать синхронизацию и для трех и для четырех форумов по аналогии.
(С)
ipsbeyond