Skip to content

Вывод данных

Здравствуйте, подскажите как реализовать вывод к примеру имени пользователя, id, мыла и другой ифны автоматизированного пользователя, на отдельную от форума страницу?

К примеру есть страница start.php нужно что бы при её просмотре пользователю вывелся его логин, id, группа, мыло.

Featured Replies

<?php

define( 'ENFORCE_ACCESS', TRUE );

require_once 'init.php';
\IPS\Dispatcher\External::i();

$member = \IPS\Member::loggedIn();
var_dump( $member );

?>

  • Author

Спасибо это то что нужно, но остались ещё вопросы.

Как достать ключ логина, то есть к примеру при ссылке Выход используется ключ например logout/?csrfKey=0f8ce0ac1a3ee2cfd1523c2f68a50307 вот как получить этот ключ то же на отдельной странице?

Где храниятся названия разделов и их описание? в таблице forums_forums их нет, то же самое с группами, нашёл их название в таблице core_sys_lang_words но не могу понять по какому принципу сделать выборку из этой таблицы, то есть к примеру у группы значение id равно 4 как вывести название группы из этой таблицы?

csrf ключ:

 

\IPS\Session::i()->csrfKey

Где храниятся названия разделов и их описание? в таблице forums_forums их нет, то же самое с группами, нашёл их название в таблице core_sys_lang_words но не могу понять по какому принципу сделать выборку из этой таблицы, то есть к примеру у группы значение id равно 4 как вывести название группы из этой таблицы?

Зачем вообще туда лезть?

 

Работа с группами:

\IPS\Member\Group::groups()

 

Работа с форумами:

\IPS\forums\Forum::roots()

  • Author

Это не то, с помощью этого можно вывести все из таблицы групп, но кроме названий групп которых там нет, то же самое и с форумами

	$groupsNames = array();

foreach	(\IPS\Member\Group::groups() as $group)
{
	$groupsNames[] = $group->name;
}

$groupsAsString = implode(', ', $groupsNames);
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $groupsAsString );

print $groupsAsString;

 

Мультиязычно.

  • 1 month later...

Добрый день,

 

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

 

Использую код:

<?php

require_once 'forum/init.php';
/* Инициализируем систему */
\IPS\Dispatcher\Front::i(); //or \IPS\Dispatcher\Build::i();

/* Получаем объект с данными о текущем пользователе */
$member = \IPS\Member::loggedIn(); 

 

Проверка, зарегистрирован пользователь или нет:

if ($member->member_id) 
{
 форма с имением и выход.
}

/* Инициализируем систему */

\IPS\Dispatcher\Front::i(); //\IPS\Dispatcher\Build::i();

Кстати да, если нужен фреймворк форума именно как api, то лучше использовать для инициализации класс Build, или даже External. Front предназначен для публичной части форума с загрузкой css и js файлов и всякими проверками и ошибками, что в случае api для отдельного приложения не совсем желательно. Front имеет смысл использовать когда пишете в оболочки форума. И без вызова init(), этот метод вызывается автоматически из i().

 

 

столкнулся только с одной проблемой, выкидывает из сессии (иногда)

Смотрите кукисы. В частности для повторной аутентификации после истечения сессии - pass_hash и member_id.

По части проверок "Front" ограничивает только метод вывода данных, темплейты, скрипты и стили автоматом не подключаются, это уже "Controller". Что до API, он сильно сужает возможности работы с фреймворком.

  • 10 months later...

Добрый вечер, использовал данный код:

 

<?php require_once './../forum.x.ru/init.php';
\IPS\Dispatcher\Build::i();

$member = \IPS\Member::loggedIn();
echo var_dump( $member ); ?>

И получил это:

 

object(IPS\Member)#49 (29) { ["_followData"]=> NULL ["_previousPhotoType":protected]=> NULL ["_group"]=> NULL ["restrictions":protected]=> NULL ["modPermissions":protected]=> NULL ["calculatedLanguageId":protected]=> NULL ["markers"]=> array(0) { } ["markersResetTimes":protected]=> array(0) { } ["haveAllMarkers":protected]=> bool(false) ["defaultStreamId":protected]=> bool(false) ["changedCustomFields"]=> array(0) { } ["previousName":protected]=> NULL ["_groups":protected]=> NULL ["_socialGroups":protected]=> NULL ["sessionData":protected]=> NULL ["_lang":protected]=> NULL ["_url":protected]=> NULL ["profileFields"]=> NULL ["_reputationData":protected]=> NULL ["_reputationLastDayWon":protected]=> NULL ["_reputationDaysWonCount":protected]=> NULL ["_following":protected]=> array(0) { } ["reportCount":protected]=> NULL ["ignorePreferences":protected]=> NULL ["_ppdLimit":protected]=> NULL ["_data":protected]=> array(14) { ["member_group_id"]=> int(2) ["mgroup_others"]=> string(0) "" ["joined"]=> int(1483646932) ["ip_address"]=> string(13) "172.68.10.236" ["timezone"]=> string(3) "UTC" ["allow_admin_mails"]=> int(1) ["pp_photo_type"]=> string(0) "" ["member_posts"]=> int(0) ["pp_main_photo"]=> NULL ["pp_thumb_photo"]=> NULL ["failed_logins"]=> NULL ["pp_reputation_points"]=> int(0) ["signature"]=> string(0) "" ["auto_track"]=> string(47) "{"content":0,"comments":0,"method":"immediate"}" } ["_new":protected]=> bool(true) ["changed"]=> array(8) { ["member_group_id"]=> int(2) ["mgroup_others"]=> string(0) "" ["joined"]=> int(1483646932) ["ip_address"]=> string(13) "172.68.10.236" ["timezone"]=> string(3) "UTC" ["allow_admin_mails"]=> int(1) ["pp_photo_type"]=> string(0) "" ["member_posts"]=> int(0) } ["skipCloneDuplication"]=> bool(false) }

 

Собственно вопрос, а как получить member_id и т.п.?

Так вы уже получили данные текущего пользователя в объекте $member. Обращайтесь к данным пользователя как к обычным свойствам объекта - $member->member_id и тп.

Почему-то не срабатывает, он не видит эти данные. Я залил файл test.php на свой сайт по адресу: test.x.ru/test.php, внутри содержится код:

 

<?php

require_once 'forum.x.ru/init.php';
/* Инициализируем систему */
\IPS\Dispatcher\Build::i(); //or \IPS\Dispatcher\Build::i();

/* Получаем объект с данными о текущем пользователе */
$member = \IPS\Member::loggedIn(); 
var_dump($member);

При вызове скрипта я получаю следующие:

 

object(IPS\Member)#48 (29) {  }

 

И ещё залил файл test.php по адресу https://forum.x.ru/test.php, содержимое следующие: (файл лежит в директории с форумом IPB 4.1.17.1 версии)

 

<?php

require_once 'init.php';
/* Инициализируем систему */
\IPS\Dispatcher\Build::i(); //or \IPS\Dispatcher\Build::i();

/* Получаем объект с данными о текущем пользователе */
$member = \IPS\Member::loggedIn(); 
var_dump($member);

И выводит он уже совсем другое:

 

object(IPS\Member)#48 (29) { } 1 

 

Так вот вопрос, как получать эти же самые данные в 1 случае?

Edited by siv1987
Не нужно приводить портянки кода

Я залил файл test.php на свой сайт по адресу: test.x.ru/

У вас разные домены. Чтобы получить данные авторизованого пользователя с forum.x.ru на домене test.x.ru, куки должны быть глобальными. В противном случае они доступны только на устанавливаемом домене.

 

В constants.php, в папке форума добавить

 

define( 'COOKIE_DOMAIN', '.x.ru' );

Где x.ru основной домен второго уровня.

Создал файл constants.php в папке forum.x.ru

 

Добавил содержимое:

 

<?php define( 'COOKIE_DOMAIN', '.x.ru' ); ?>

 

Почему-то ничего не изменилось(

Edited by Iluha32

Create an account or sign in to comment

Account

Navigation

Search

Search

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.