Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Добавить поле в профиле пользователя. 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).

 

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

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

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

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

Опубликовано:
  • Автор

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

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

 

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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']

Опубликовано:

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

 

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

 

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

Опубликовано:

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

 

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

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.