Jump to content
Дизайн и модификация Invision Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
sergey_privacy

Добавить поле в профиле пользователя. IPB 2.3.6

Recommended Posts

Добрый день!

Я в IPB новичок. У меня возникло 2 связанных друг с другом вопроса.

1. Хочу добавить в таблицу данных пользователя новое поле "MyRating_ID". При просмотре пользователем своего профиля он видит поля "Ваш e-mail адрес", "Среднее количество сообщений в день" и т.д. Я хочу ниже добавить свое поле "MyRating_ID", в котором будет отображаться значение из таблицы. Если я правильно понимаю, в одном файле происходит чтение значений из базы, а где то в другом файле лежит "скелет" страницы. Какие файлы надо поправить, чтобы вывести это поле?

2. При регистрации пользователя в базу добавляется новая строка. Т.к. количество полей в ней изменилось, какой файл поправить для того, чтобы регистрация прошла успешно?

Share this post


Link to post

а где то в другом файле лежит "скелет" страницы

Внешний вид -> %Скин% -> Изменить HTML шаблоны -> skin_profile (просмотр профиля) -> personal_portal_main

 

 

Т.к. количество полей в ней изменилось, какой файл поправить для того, чтобы регистрация прошла успешно

Успешность регистрации не зависит от количество полей, так как оно должно иметь дефолтное значение.

/sources/action_public/register.php

Share this post


Link to post

Внешний вид -> %Скин% -> Изменить HTML шаблоны -> skin_profile (просмотр профиля) -> personal_portal_main

У меня есть доступ к базе данных, есть доступ по ФТП, но нет административной учетной записи.

Сам шаблон находится в файлах или базе данных? Просто подскажите, где искать, чтобы меньше перерывать?

 

 

Успешность регистрации не зависит от количество полей, так как оно должно иметь дефолтное значение.

/sources/action_public/register.php

Как это не зависит? В базу данных новая строка вставляется выражением типа INSERT INTO xxx VALUES (1, 2, 3)

Если я в конце добавил поле, то выражение тоже должно стать INSERT INTO xxx VALUES (1, 2, 3, 4). Иначе никто не зарегистрируется.

Share this post


Link to post

Как это не зависит? В базу данных новая строка вставляется выражением типа INSERT INTO xxx VALUES (1, 2, 3)

Если я в конце добавил поле, то выражение тоже должно стать INSERT INTO xxx VALUES (1, 2, 3, 4). Иначе никто не зарегистрируется.

Это Вы будете так добавлять в phpMyAdmin (и то есть еще второй вариант добавления записи), а форум использует целый класс для работы с БД.

В данном случае метод do_insert

    	$dba   = $this->compile_db_insert_string( $arr );
   	$query = "INSERT INTO ".$this->obj['sql_tbl_prefix']."$tbl ({$dba['FIELD_NAMES']}) VALUES({$dba['FIELD_VALUES']})";

Как раз таки используется второй вариант.

Share this post


Link to post

Если я в конце добавил поле, то выражение тоже должно стать INSERT INTO xxx VALUES (1, 2, 3, 4). Иначе никто не зарегистрируется.

Не обязательно если поле имеет значение по умолчанию. К тому же, как выше сказал newbie, форум использует спецификацию полей: INSERT INTO tbl_name (col1, col2, col6) VALUES (value1, value2, value6).

 

У меня есть доступ к базе данных, есть доступ по ФТП, но нет административной учетной записи.

Сам шаблон находится в файлах или базе данных?

Сам шаблон находится в базе данных и редактируется только через АЦ.

Если есть доступ к бд или фтп, что мешает зарегистрироваться на форуме и поменять через бд группу на администратора? Восстановления доступа к АЦ

  • Upvote 1

Share this post


Link to post

Сам шаблон находится в базе данных и редактируется только через АЦ.

Если есть доступ к бд или фтп, что мешает зарегистрироваться на форуме и поменять через бд группу на администратора? Восстановления доступа к АЦ

 

Спасибо, почти разобрался. Поменял себе права, зашел в АЦ, начал разбираться и понял, что неправильно сразу указал, что вообще ищу. Я ищу не поля профиля, а поля личных данных. Соответственно мне нужен раздел "skin_ucp (личные данные пользователя)". Конкретно часть "Обзор вашей учетной записи". Пока пытаюсь найти, но не получается. Не подскажете, какой именно?

Share this post


Link to post

Соответственно мне нужен раздел "skin_ucp (личные данные пользователя)". Конкретно часть "Обзор вашей учетной записи". Пока пытаюсь найти, но не получается. Не подскажете, какой именно?

skin_ucp (личные данные пользователя) -> splash

  • Upvote 1

Share this post


Link to post

skin_ucp (личные данные пользователя) -> splash

Спасибо, самое то!

Остался последний вопрос.

В этом шаблоне я добавил текстовое поле и отображение переменной. Переменные, как я вижу, берутся из функции "splash()", которая находится в файле "sources\action_public\usercp.php". Забил тестовые данные в переменую, все отлично отображается.

 

Заполнение полей выполняет подобная конструкция:

  $info['member_email']    = $this->ipsclass->member['email'];
  $info['member_posts']    = $this->ipsclass->member['posts'];

 

Сам класс "ipsclass" описан в файле sources\ipsclass.php.

Выбор из базы производится примерно такими запросами:

$member = $this->DB->build_and_exec_query( array( 'select' => "members_cache", 'from' => 'members', 'where' => 'id='.$member_id ) );

Пытаюсь по аналогии сделать выборку из базы поля "MyRating_ID", но данные не отображаются.

Поможете понять, почему не работает?

Share this post


Link to post

Сам класс "ipsclass" описан в файле sources\ipsclass.php.

Там же есть комментарии

* // Array of member variables (taken from class_session::$member)
* $ipsclass->member

Share this post


Link to post

Там же есть комментарии

* // Array of member variables (taken from class_session::$member)
* $ipsclass->member

Я вчера до 2 часов ночи просидел над этим файлом, ни фига не смог вернуть нужное поле.

Share this post


Link to post

sources/classes/class_session.php

    function load_member($member_id=0)

Почти сразу же идет выборка полей. Можете добавить свое MyRating_ID.

 

Дальше использовать $this->ipsclass->member['MyRating_ID']

  • Upvote 1

Share this post


Link to post

Если ваше поле находится в таблице пользователя то достаточно просто

 

использовать $this->ipsclass->member['MyRating_ID']

 

Суперкласс $this->ipsclass кстати доступен также и в шаблонах, не обязательно его значения передавать из других мест.

  • Upvote 1

Share this post


Link to post

Если ваше поле находится в таблице пользователя то достаточно просто

 

Суперкласс $this->ipsclass кстати доступен также и в шаблонах, не обязательно его значения передавать из других мест.

Странно. Из комментария следует, что данные берутся из class_session::$member

Открываем и видим

            $this->ipsclass->DB->build_query( array( 'select' => "id, name, mgroup, member_login_key, member_login_key_expire, email, restrict_post, view_sigs, view_avs, view_pop, view_img, auto_track,
															  mod_posts, language, skin, new_msg, show_popup, msg_total, time_offset, posts, joined, last_post, subs_pkg_chosen,
															  ignored_users, login_anonymous, last_visit, last_activity, dst_in_use, view_prefs, org_perm_id, mgroup_others, temp_ban, sub_end,
															  has_blog, has_gallery, members_markers, members_editor_choice, members_auto_dst, members_display_name, members_created_remote,
															  members_cache, members_disable_pm",
												 'from'   => 'members',
												 'where'  => 'id='.$member_id ) );

Явно указано, какие поля брать из таблицы.

  • Upvote 1

Share this post


Link to post

Тогда придется указать свое поле.

Да, так и есть, в двойке поля захардкодены в отличие от тройке где выбираются сразу все поля. Забыл об этом нюансе.

Share this post


Link to post

1. В файле sources\action_public\usercp.php вставил строчку

$info['MyRating_ID']    = "zzz " . $this->ipsclass->member['id'] . " " $this->ipsclass->member['MyRating_ID'] . " yyy";

 

 

2. В шаблоне я указал необходимое поле и забил тестовые текстовые значения - отображается "zzz ИД пользователя yyy". Мое поле не отображается.

 

3. В файле sources\classes\class_session.php в функции function load_member($member_id=0) я добавил мое поле:

$this->ipsclass->DB->build_query( array( 'select' => "id, name, mgroup, member_login_key, member_login_key_expire, email, restrict_post, view_sigs, view_avs, view_pop, view_img, auto_track, mod_posts, language, skin, new_msg, show_popup, msg_total, time_offset, posts, joined, last_post, ubs_pkg_chosen, ignored_users, login_anonymous, last_visit, last_activity, dst_in_use, view_prefs, org_perm_id, mgroup_others, temp_ban, sub_end,  has_blog, has_gallery, members_markers, members_editor_choice, members_auto_dst, members_display_name, members_created_remote, members_cache, members_disable_pm, thanks_point, rep_allow, rep_notify, MyRating_ID", 
'from'   => 'members',
'where'  => 'id='.$member_id ) );

 

Результат не изменился. Видимо, где то еще что то не учел.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...