Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
sergey_privacy

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

Рекомендованные сообщения

Добрый день!

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

 

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

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

/sources/action_public/register.php

Поделиться сообщением


Ссылка на сообщение

Внешний вид -> %Скин% -> Изменить 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). Иначе никто не зарегистрируется.

Поделиться сообщением


Ссылка на сообщение

Как это не зависит? В базу данных новая строка вставляется выражением типа 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']})";

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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", но данные не отображаются.

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

sources/classes/class_session.php

    function load_member($member_id=0)

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

 

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

Суперкласс $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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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 ) );

 

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...