Sannis Опубликовано 16 Января 2008 Жалоба Поделиться Опубликовано 16 Января 2008 В этой теме показана реализация добавления дополнительного функционала на страницу регистрации IP.Board с возможностью дальнейшего редактирования введённых данных.Способ вывода информации из базы данных в профиль пользователя.Также привед пример нехитрой основы для интеграции с чем-то через дополнительную таблицу, с занесением в неё данных при создании пользователя с корректной очесткой и т.д. Также есть инструкция, как сделать обязательным для заполнения поле стандартное "пол" при регистрации. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 16 Января 2008 Автор Жалоба Поделиться Опубликовано 16 Января 2008 Вывод дополнительной информации в профиле пользователя из базы данных.Итак приступим. Допустим у нас есть таблица в базе данных:CREATE TABLE `ibf_members_stats` ( `id` MEDIUMINT( 8 ) NOT NULL , `points` INT( 10 ) NOT NULL , `mana` INT( 10 ) NOT NULL , PRIMARY KEY ( `id` ) );, либо есть дополнительные поля в таблицах, информация из которых и так выводится в профиле(ibf_members, ibf_member_extra и другие, см. ниже). Подготовка:Добавляем языковые переменные для таблицы в профиле. Этот пункт можно пропустить, если используется один язык и прописать текст прямо в шаблоне.[/b]Открываем ./cache/lang_cache/язык/lang_profile.php, добавляем в массив следующее: function profile_get_all( $a ) { return "SELECT m.*[color="#8B0000"][b], ms.*[/b][/color], me.*, s.location_1_id, s.location_2_id, s.location_1_type, s.location_2_type, s.running_time, s.location as sesslocation, p.* FROM ".SQL_PREFIX."members m LEFT JOIN ".SQL_PREFIX."member_extra me ON ( me.id=m.id ) LEFT JOIN ".SQL_PREFIX."sessions s ON (s.member_id=m.id) LEFT JOIN ".SQL_PREFIX."profile_portal p ON (p.pp_member_id=m.id) [color="#8B0000"][b]LEFT JOIN ".SQL_PREFIX."members_stats ms ON (ms.id=m.id)[/b][/color] WHERE m.id={$a['mid']}"; }Будьте аккуратны с запятой в начале запроса! Если же наше поле содержится в таблицах members, member_extra или profile_portal, то изменять запрос не надо, эти данные и так попадут в скрипт. 2. Добавляем таблицу для вывода данных в шаблон профиля.Открываем шаблон skin_profile->show_profile, ищем: $this->ipsclass->DB->build_query( array( 'select' => 'm.*', 'from' => array( 'members' => 'm' ), 'where' => $query, 'add_join' => array( 0 => array( 'select' => 'me.*', 'from' => array( 'member_extra' => 'me' ), 'where' => 'me.id=m.id', 'type' => 'left' ), 1 => array( 'select' => 'pp.*', 'from' => array( 'profile_portal' => 'pp' ), 'where' => 'pp.pp_member_id=m.id', 'type' => 'left' ), 2 => array( 'select' => 'g.*', 'from' => array( 'groups' => 'g' ), 'where' => 'g.g_id=m.mgroup', 'type' => 'left' ), 3 => array( 'select' => 's.location_1_id, s.location_2_id, s.location_1_type, s.location_2_type, s.running_time, s.location as sesslocation', 'from' => array( 'sessions' => 's' ), 'where' => "s.member_id=m.id", 'type' => 'left' ), [color="#8B0000"][b]5 => array( 'select' => 'ms.*', 'from' => array( 'members_stats' => 'ms' ), 'where' => "ms.id=m.id", 'type' => 'left' ),[/b][/color] 4 => array( 'select' => 'pc.*', 'from' => array( 'pfields_content' => 'pc' ), 'where' => 'pc.member_id=m.id', 'type' => 'left' ) ) ) ); $this->ipsclass->DB->exec_query();Будьте аккуратны с запросом! Если же наше поле содержится в таблицах members, member_extra или profile_portal, то изменять запрос не надо, эти данные и так попадут в скрипт. 2. Добавляем таблицу для вывода данных в шаблон профиля.Открываем шаблон skin_profile->personal_portal_main, ищем: <!-- Interests --> <if="$member['_interests']"> <div class='pp-header'>{$this->ipsclass->lang['interests']}</div> <div class='row1' style='padding:6px; margin-bottom:1px; padding-left:10px' id='pp-personal_statement'> {$member['_interests']} </div> </if> <!-- / Interests -->Добавляем после: <!-- Stats --> <div class='pp-header'>{$this->ipsclass->lang['stats_title']}</div> <div class='row1' style='padding:6px; margin-bottom:1px; padding-left:10px' id='pp-personal_statement'>{$this->ipsclass->lang['stats_points']}: {$member['points']}</div> <div class='row1' style='padding:6px; margin-bottom:1px; padding-left:10px' id='pp-personal_statement'>{$this->ipsclass->lang['stats_mana']}: {$member['mana']}</div> <!-- / Stats -->3. Добиваемся передачи выбранной из базы информации в шаблоны профиля.В случае профиля портала никаких дополнительных действий для повления непосредственно данных в профиле делать не надо, однако если нужно сделать скажем форматирование чисел, то сделать надо вот что:Открываем ./sources/action_public/profile.php, ищем: //----------------------------------------- // PHOTO //----------------------------------------- $member = $this->personal_portal_set_information( $member );Добавляем после: $member['points'] = $this->ipsclass->do_number_format($member['points']); $member['mana'] = $this->ipsclass->do_number_format($member['mana']);В этом месте $member - массив, который будет передан в шаблон. В этот момент можно делать с данными всё что угодно. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 16 Января 2008 Автор Жалоба Поделиться Опубликовано 16 Января 2008 Продолжение экскурса в модифицирование страниц: шаблонов и связанного с ними кода. Как добавить на страницу регистрации поле, обязательное для заполнения.Но не через дополнительные поля. Например, это можно использовать с некоторой модификацией для вывода на страницу регистрации ввода пола, интересов, других стандартных полей. Допустим у нас есть поле xxx_field в таблице ibf_members, которое мы хотим заполнять при регистрации.(ALTER TABLE `ibf_members` ADD `xxx_field` VARCHAR( 32 ) NOT NULL ;) 1. Добавляем языковые переменные. Этот пункт можно пропустить, если используется один язык и прописать текст прямо в шаблоне.Открываем ./cache/lang_cache/язык/lang_register.php, добавляем в массив следующее: $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, 'members_l_display_name' => strtolower( $this->ipsclass->vars['auth_allow_dnames'] ? $members_display_name : $in_username ), 'member_login_key' => $this->ipsclass->converge->generate_auto_log_in_key(), 'member_login_key_expire' => $_mke_time, 'email' => $in_email, 'mgroup' => $mem_group, 'posts' => 0, 'joined' => time(), 'ip_address' => $this->ipsclass->ip_address, 'time_offset' => $this->ipsclass->input['time_offset'], 'view_sigs' => 1, 'email_pm' => 1, 'view_img' => 1, 'view_avs' => 1, 'restrict_post' => 0, 'view_pop' => 1, 'msg_total' => 0, 'new_msg' => 0, 'coppa_user' => $coppa, 'language' => $this->ipsclass->vars['default_language'], 'members_auto_dst' => 1, 'members_editor_choice' => $this->ipsclass->vars['ips_default_editor'], 'allow_admin_mails' => intval( $this->ipsclass->input['allow_admin_mail'] ), 'hide_email' => $this->ipsclass->input['allow_member_mail'] ? 0 : 1, 'subs_pkg_chosen' => intval( $this->ipsclass->input['subspackage'] ) );Добавляем в массив элемент по примеру: $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, 'members_l_display_name' => strtolower( $this->ipsclass->vars['auth_allow_dnames'] ? $members_display_name : $in_username ), 'member_login_key' => $this->ipsclass->converge->generate_auto_log_in_key(), 'member_login_key_expire' => $_mke_time, 'email' => $in_email, 'mgroup' => $mem_group, 'posts' => 0, 'joined' => time(), 'ip_address' => $this->ipsclass->ip_address, 'time_offset' => $this->ipsclass->input['time_offset'], 'view_sigs' => 1, 'email_pm' => 1, 'view_img' => 1, 'view_avs' => 1, 'restrict_post' => 0, 'view_pop' => 1, 'msg_total' => 0, 'new_msg' => 0, 'coppa_user' => $coppa, 'language' => $this->ipsclass->vars['default_language'], 'members_auto_dst' => 1, 'members_editor_choice' => $this->ipsclass->vars['ips_default_editor'], 'allow_admin_mails' => intval( $this->ipsclass->input['allow_admin_mail'] ), 'hide_email' => $this->ipsclass->input['allow_member_mail'] ? 0 : 1, [b][color="#8B0000"]'xxx_field' => trim($this->ipsclass->input['xxx']),[/color][/b] 'subs_pkg_chosen' => intval( $this->ipsclass->input['subspackage'] ) ); 4. Теперь поддержка редактирования поля в личных данных, на странице «Изменить личные данные».Открываем ./cache/lang_cache/язык/lang_ucp.php, добавляем в массив следующее: //----------------------------------------- // Throw to the DB //----------------------------------------- $this->ipsclass->DB->do_update( 'members', array ( 'restrict_post' => $restrict_post, 'mgroup' => $this->ipsclass->input['mgroup'], 'title' => $this->ipsclass->input['title'], 'language' => $this->ipsclass->input['language'], 'skin' => $this->ipsclass->input['skin'], 'hide_email' => $this->ipsclass->input['hide_email'], 'email_pm' => $this->ipsclass->input['email_pm'], 'posts' => $this->ipsclass->input['posts'], 'bday_day' => intval($this->ipsclass->input['bday_day']), 'bday_month' => intval($this->ipsclass->input['bday_month']), 'bday_year' => intval($this->ipsclass->input['bday_year']), 'mod_posts' => $mod_queue, 'org_perm_id' => $permid, 'warn_level' => intval( $this->ipsclass->input['warn_level'] ), 'members_disable_pm' => intval( $this->ipsclass->input['members_disable_pm'] ), 'mgroup_others' => $_POST['mgroup_others'] ? ','.implode( ",", $_POST['mgroup_others'] ).',' : '', ) , 'id='.$this->ipsclass->input['mid'] );Видоизменить до вида: //----------------------------------------- // Throw to the DB //----------------------------------------- $this->ipsclass->DB->do_update( 'members', array ( 'restrict_post' => $restrict_post, 'mgroup' => $this->ipsclass->input['mgroup'], 'title' => $this->ipsclass->input['title'], 'language' => $this->ipsclass->input['language'], 'skin' => $this->ipsclass->input['skin'], 'hide_email' => $this->ipsclass->input['hide_email'], 'email_pm' => $this->ipsclass->input['email_pm'], 'posts' => $this->ipsclass->input['posts'], 'bday_day' => intval($this->ipsclass->input['bday_day']), 'bday_month' => intval($this->ipsclass->input['bday_month']), 'bday_year' => intval($this->ipsclass->input['bday_year']), 'mod_posts' => $mod_queue, 'org_perm_id' => $permid, 'warn_level' => intval( $this->ipsclass->input['warn_level'] ), 'members_disable_pm' => intval( $this->ipsclass->input['members_disable_pm'] ), [b][color="#8B0000"]'xxx_field' => $this->ipsclass->input['xxx_field'],[/color][/b] 'mgroup_others' => $_POST['mgroup_others'] ? ','.implode( ",", $_POST['mgroup_others'] ).',' : '', ) , 'id='.$this->ipsclass->input['mid'] ); P.S. И на закуску: Пусть нам при регистрации нужно создать запись для нового пользователя в таблице для описанной выше статистики.1. В register.php в create_account() находим: //----------------------------------------- // Insert: MEMBER EXTRA //----------------------------------------- $this->ipsclass->DB->do_insert( 'member_extra', array( 'id' => $member_id, 'vdirs' => 'in:Входящие|sent:Отправленные', 'interests' => '', 'signature' => '' ) );Добавляем после(можно и значения по умолчанию вписать, если в БД они не заданы или туда нужно внести что-то из введённого пользователем на странице): //----------------------------------------- // Insert: STATS //----------------------------------------- $this->ipsclass->DB->do_insert( 'members_stats', array( 'id' => $member_id ) );2. В ./sources/action_admin/member.php в member_do_add() найти: //----------------------------------------- // Insert: MEMBER EXTRA //----------------------------------------- $this->ipsclass->DB->do_insert( 'member_extra', array( 'id' => $member_id, 'vdirs' => 'in:Входящие|sent:Отправленные', 'interests' => '', 'signature' => '' ) );Добавить после: //----------------------------------------- // Insert: STATS //----------------------------------------- $this->ipsclass->DB->do_insert( 'members_stats', array( 'id' => $member_id ) );Найти в member_delete_do($id): $this->ipsclass->DB->do_delete( 'member_extra' , "id".$mids );Добавить после: $this->ipsclass->DB->do_delete( 'members_stats' , "id".$mids ); Открыть ./sources/tasks/removevalidating.php, найти:$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'members' , 'where' => "id IN(".implode(",",$mids).")" ) );Добавить после:$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'members_stats' , 'where' => "id IN(".implode(",",$mids).")" ) ); P.P.S. О замеченных багах в статье просьба сообщать мне в ПМ. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 19 Января 2008 Автор Жалоба Поделиться Опубликовано 19 Января 2008 V I R U S, отвечаю на вопрос про ник Предположим всё что я писал выше нам нужно для интеграции форума с какой-то другой системой, которая и будет использовать таблицу ibf_members_stats. А для вывода информации этим скриптом нужно будет выводить и ник пользователя. Можно было бы конечно использовать ник, хранящийся в поле members_display_name таблицы ibf_members. Но, как можно легко проверить, это поле хранит очищенный от спецсимволов ник, где некоторые символы заменены из html-представлениями. Что же нам делать? Мы можем во все функции форума, которые ответственны за изменение ника дописать обратный конверт в символы + запись в таблицу ibf_members_stats. 1. Создаём столбец mname в таблице ibf_members_stats:ALTER TABLE ibf_members_stats ADD mname VARCHAR(50); 2. Создаём в ipsclass функцию для чистки имени:Открыть ./sources/ipsclass.php, добавить в класс функцию: /** * Clean member name * * @param string Cleaned display name * @return string Display name */ function clean_members_stats_name($display_name) { // Здесь вы можете очистить имя от тех символов, которые не должны попадать в имя, например: $display_name = str_replace( "'", "'" , $display_name ); return $display_name; } 3. Регистрация:Открыть ./sources/action_public/registration.php, найти добавленный нами инсерт строки в ibf_members_stats при регистрации: //----------------------------------------- // Insert: STATS //----------------------------------------- $this->ipsclass->DB->do_insert( 'members_stats', array( 'id' => $member_id ) );Заменить на: //----------------------------------------- // Insert: STATS //----------------------------------------- $this->ipsclass->DB->force_data_type = array( 'mname' => 'string' ); $members_stats_name = $this->ipsclass->vars['auth_allow_dnames'] ? $_POST['members_display_name'] : $_POST['UserName']; $this->ipsclass->DB->do_insert( 'members_stats', array( 'id' => $member_id, 'mname' => $this->ipsclass->clean_members_stats_name($members_stats_name) ) ); 4. Изменение пользователя админом:Открыть ./sources/action_admin/member.php, найти: //----------------------------------------- // Still here? Change it then //----------------------------------------- $this->ipsclass->DB->force_data_type = array( 'members_display_name' => 'string', 'members_l_display_name' => 'string' ); $this->ipsclass->DB->do_update( 'members' , array( 'members_display_name' => $display_name, 'members_l_display_name' => strtolower($display_name) ), "id=" .$member['id'] );Добавить после: $this->ipsclass->DB->force_data_type = array( 'mname' => 'string' ); $this->ipsclass->DB->do_update( 'members_stats' , array( 'mname' => $this->ipsclass->clean_members_stats_name($_POST['new_name']) ), "id=".$member['id'] );Найти: if ( ! $this->ipsclass->vars['auth_allow_dnames'] ) { //----------------------------------------- // Not using sep. display names? //----------------------------------------- $this->ipsclass->DB->force_data_type = array( 'members_display_name' => 'string', 'members_l_display_name' => 'string' ); $this->ipsclass->DB->do_update( 'members' , array( 'members_display_name' => $new_name, 'members_l_display_name' => strtolower( $new_name ) ), 'id=' . $mid );Добавить после: $this->ipsclass->DB->force_data_type = array( 'mname' => 'string' ); $this->ipsclass->DB->do_update( 'members_stats' , array( 'mname' => $this->ipsclass->clean_members_stats_name($_POST['new_name']) ), "id=".$mid ); 5. Изменение ника пользователем:Открыть ./sources/action_public/usercp.php, найти: $this->ipsclass->DB->force_data_type = array( 'members_display_name' => 'string', 'members_l_display_name' => 'string' ); $this->ipsclass->DB->do_update( 'members' , array( 'members_display_name' => $display_name, 'members_l_display_name' => strtolower( $display_name ) ), "id=" . $this->ipsclass->member['id'] );Добавить после: $this->ipsclass->DB->force_data_type = array( 'mname' => 'string' ); $this->ipsclass->DB->do_update( 'members_stats' , array( 'mname' => $this->ipsclass->clean_members_stats_name($_POST['display_name']) ), "id=".$this->ipsclass->member['id'] ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Raver2 Опубликовано 8 Июля 2008 Жалоба Поделиться Опубликовано 8 Июля 2008 Уважаемый Sannis спасибо за инструкции не могли бы вы еще сделать инструкцию по реализации поиска по этим самым дополнительным переменным?Причём в формате ссылки http://www.google.ru/search?hl=ru&q=%EF%F0%E8%E2%E5%F2&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr= как в гугле кпримеруИ еще при поиске по форуму есть защита от загрузки БД на частое обращение но в поиске по пользователям я так понял нету насколько ли это критично особенно если около 32,000 пользователей ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Toyotaclubs Опубликовано 19 Августа 2008 Жалоба Поделиться Опубликовано 19 Августа 2008 Сорри, поиском не нашёл...кто подскажет такой момент: создал доп. поля, сделал их обязательными при регистрации, но пользователи как-то регяца так, что когда я просматриваю профиль нового зарегеного юзера, у него не отобразается инфа в доп. полях... Попробовал сам зарегица, спецом не указал ничего в доп. полях, так и меня не пропустила регистрация...Как такое м.б.? Что делать? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
art-trans Опубликовано 7 Октября 2008 Жалоба Поделиться Опубликовано 7 Октября 2008 А есть ли возможность перепрограммить мод дополнительных полей, чтобы при регистрации пользователю задавался конкретный вопрос, и на него должен быть дан конкретный ответ? И как сделать чтобы была некая база вопросов (около 5-10) с конкретным ответом для каждого из них? А то спам-боты уже замахали. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 7 Октября 2008 Автор Жалоба Поделиться Опубликовано 7 Октября 2008 А есть ли возможность перепрограммить мод дополнительных полей, чтобы при регистрации пользователю задавался конкретный вопрос, и на него должен быть дан конкретный ответ? И как сделать чтобы была некая база вопросов (около 5-10) с конкретным ответом для каждого из них? А то спам-боты уже замахали.В архиве есть такой мод, один в один. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
fishcka Опубликовано 3 Июня 2010 Жалоба Поделиться Опубликовано 3 Июня 2010 (изменено) добавление ДАТЫ РОЖДЕНИЯ (найдено тут и немножечко творчески обработано) открываем ./sources/action_public/register.php находим //----------------------------------------- // Boxes checked? //----------------------------------------- вставляем ПЕРЕД //----------------------------------------- // Format the birthday drop boxes.. //----------------------------------------- $day = "<option value='0'>--</option>"; $mon = "<option value='0'>--</option>"; $year = "<option value='0'>--</option>"; for( $i = 1; $i < 32; $i++ ) { $day .= "<option value='$i'>$i</option>"; } for( $i = 1; $i < 13; $i++ ) { $mon .= "<option value='$i'>".$this->ipsclass->lang['month'.$i]."</option>"; } $date = getdate(); $i = $date['year'] - 1; $j = $date['year'] - 100; for( $i; $j < $i; $i-- ) { $year .= "<option value='$i'>$i</option>"; } $b_output = "<fieldset><legend><b>{$this->ipsclass->lang['b_date']}</b><br /></legend> <div>{$this->ipsclass->lang['bdate_desc']}</div><br /> <select name='day' style='width:66px;'>{$day}</select> <select name='month'>{$mon}</select> <select name='year' style='width:66px;'>{$year}</select></fieldset>"; $this->output = str_replace("<!--{BIRTH_DATE}-->", $b_output, $this->output); дальшеесли нужно чтобы дата рождения заполнялась обязательно, делаем следующее, если заполнение добровольное - пропускаем //----------------------------------------- // Are we asking the member or admin to preview? //----------------------------------------- вставляем ПЕРЕД //----------------------------------------- // Check user's date of birth //----------------------------------------- $c_cnt = 0; foreach( array('day','month','year') as $v ) { if( ! $this->ipsclass->input[$v] ) { $c_cnt++; } } if( $c_cnt > 0 ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'calendar_not_all' ) ); } дальше находим 'coppa_user' => $coppa, 'language' => $this->ipsclass->vars['default_language'], вставляем ПЕРЕД 'bday_day' => intval($this->ipsclass->input['day']), 'bday_month' => intval($this->ipsclass->input['month']), 'bday_year' => intval($this->ipsclass->input['year']), сохраняем файлик. открываем ./cache/lang_cache/ru/lang_ucp.phpнаходим'b_date' => "Ваша дата рождения", вставляем ПОСЛЕ'bdate_desc' => "Укажите день, месяц, год вашего рождения", сохраняем файлик. дальше топаем в админку, Внешний вид -> Изменить HTML шаблоны -> skin_register -> ShowFormв удобном для вас месте, как правило перед <!--{OPTIONAL.FIELDS}--> вставляем<!--{BIRTH_DATE}--> сохраняем форму. Изменено 5 Июня 2010 пользователем fishcka Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
isenlek Опубликовано 18 Апреля 2011 Жалоба Поделиться Опубликовано 18 Апреля 2011 (изменено) Добрый вечерСкажите пожалуйста, как добавить поле пол в профиль юзеров при просмотре его? (в раздел информация)Это про основное полетам ещё есть такие поля;Домашняя страница Дата рожденияМесто жительстваИнтересыскриншот тут http://imglink.ru/show-image.php?id=2d4e9d71e22546b1acf187ffc61596e6вот сюда как добавить?, в файле profile php что для этого надо прописать ?ещё не помешает вывести название пола под аватаркой где: Группа:Сообщений:Регистрация:Пользователь №:пол <-вот сюдаскриншот http://imglink.ru/show-image.php?id=a6fabdd57841ede84278c823c56f836b PS для ipb 2.3.3 Изменено 18 Апреля 2011 пользователем isenlek isenlek отреагировал на это 1 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
krishtinski Опубликовано 20 Февраля 2024 Жалоба Поделиться Опубликовано 20 Февраля 2024 На форуме есть тема с добавлением строчного поля. Так же была тема с добавлением поля в виде иконки в минипрофиле но если первая тема немного не подходит для меня, то вторую тему вообще найти не могу. По всей видимости удалили. Собственно вопрос - какие файлы нужно редактировать для добавления своего поля с иконкой. По типу похожего на ссылку сайта. Если кто то уже делал такое то прошу поделитесь как делали. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.