При регистрации на форуме нового пользователя, ему присваивается определенный id, под которым он будет числиться. Если же вы по каким-то причинам удалите пользователя, то его id больше никому не присваивается, а при регистрации новому пользователю будет присвоен следующий, порядковый id. Таков механизм регистрации в IP.Board. Со временем между id появляются большие пробелы, которые некрасиво выглядят.
Вы хотите избавиться от пустот между id? Чтобы заставить форум присваивать свободные id новым пользователям, заполняя при этом свободные пробелы между ними, если таковые будут найдены, нужно внести несколько небольших изменений в файлы. Для большинства этот хак покажется бесполезным, эстеты – оценят его. Хак полностью рабочий и проверен на нескольких форумах.
Установка на IP.Board v2.3.x
Перед установкой сделайте резервные копии файлов и базы данных, на всякий случай.
$member = array(
'name' => $in_username,
'members_l_username' => strtolower( $in_username ),
'members_display_name' => $this->ipsclass->vars['auth_allow_dnames'] ? $members_display_name : $in_username,
$this->ipsclass->DB->query("SELECT m.id+1 as new_id FROM ibf_members m LEFT JOIN ibf_members mm ON (mm.id=m.id+1) WHERE mm.id is null ORDER BY m.id LIMIT 1");
$r = $this->ipsclass->DB->fetch_row();
$member_id = $r['new_id'];
$member = array(
'id' => $member_id,
'members_l_username' => strtolower( $in_username ),
'members_display_name' => $this->ipsclass->vars['auth_allow_dnames'] ? $members_display_name : $in_username,
//-----------------------------------------
// Get converges auto_increment user_id
//-----------------------------------------
$member_id = $this->ipsclass->DB->get_insert_id();
$member['id'] = $member_id;
//-----------------------------------------
// Get converges auto_increment user_id
//-----------------------------------------
//$member_id = $this->ipsclass->DB->get_insert_id();
//$member['id'] = $member_id;
$r = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'id, name, members_display_name',
'from' => 'members',
'where' => "mgroup <> ".$this->ipsclass->vars['auth_group'],
'order' => 'id DESC',
'limit' => array(0,1)
) );
$r = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'id, name, members_display_name',
'from' => 'members',
'where' => "mgroup <> ".$this->ipsclass->vars['auth_group'],
'order' => 'joined DESC',
'limit' => array(0,1)
) );
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name, members_display_name',
'from' => 'members',
'where' => "mgroup <> '".$this->ipsclass->vars['auth_group']."'",
'order' => "id DESC",
'limit' => array(0,1) ) );
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name, members_display_name',
'from' => 'members',
'where' => "mgroup <> '".$this->ipsclass->vars['auth_group']."'",
'order' => "joined DESC",
'limit' => array(0,1) ) );
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name, members_display_name',
'from' => 'members',
'where' => "mgroup <> '".$this->ipsclass->vars['auth_group']."'",
'order' => "id DESC",
'limit' => array(0,1) ) );
$this->ipsclass->DB->simple_exec();
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, name, members_display_name',
'from' => 'members',
'where' => "mgroup <> '".$this->ipsclass->vars['auth_group']."'",
'order' => "joined DESC",
'limit' => array(0,1) ) );
$this->ipsclass->DB->simple_exec();
Текущий хак для форумов IP.Board v1.x, 2.1.x и многие другие исправления, дополнения, баг-фиксы вы найдете
Источник: ipb-faq.ru