avgaz 8 02.01.2016 20:01 Здравствуйте, подскажите как реализовать вывод к примеру имени пользователя, id, мыла и другой ифны автоматизированного пользователя, на отдельную от форума страницу?К примеру есть страница start.php нужно что бы при её просмотре пользователю вывелся его логин, id, группа, мыло. Поделиться сообщением Ссылка на сообщение
siv1987 2 630 02.01.2016 20:16 <?php define( 'ENFORCE_ACCESS', TRUE ); require_once 'init.php'; \IPS\Dispatcher\External::i(); $member = \IPS\Member::loggedIn(); var_dump( $member ); ?> Поделиться сообщением Ссылка на сообщение
avgaz 8 04.01.2016 13:01 Спасибо это то что нужно, но остались ещё вопросы.Как достать ключ логина, то есть к примеру при ссылке Выход используется ключ например logout/?csrfKey=0f8ce0ac1a3ee2cfd1523c2f68a50307 вот как получить этот ключ то же на отдельной странице?Где храниятся названия разделов и их описание? в таблице forums_forums их нет, то же самое с группами, нашёл их название в таблице core_sys_lang_words но не могу понять по какому принципу сделать выборку из этой таблицы, то есть к примеру у группы значение id равно 4 как вывести название группы из этой таблицы? Поделиться сообщением Ссылка на сообщение
siv1987 2 630 04.01.2016 16:21 csrf ключ: \IPS\Session::i()->csrfKey Поделиться сообщением Ссылка на сообщение
newbie 1 723 05.01.2016 08:00 Где храниятся названия разделов и их описание? в таблице forums_forums их нет, то же самое с группами, нашёл их название в таблице core_sys_lang_words но не могу понять по какому принципу сделать выборку из этой таблицы, то есть к примеру у группы значение id равно 4 как вывести название группы из этой таблицы? Зачем вообще туда лезть? Работа с группами:\IPS\Member\Group::groups() Работа с форумами:\IPS\forums\Forum::roots() Поделиться сообщением Ссылка на сообщение
avgaz 8 05.01.2016 15:37 Это не то, с помощью этого можно вывести все из таблицы групп, но кроме названий групп которых там нет, то же самое и с форумами Поделиться сообщением Ссылка на сообщение
newbie 1 723 06.01.2016 10:02 $groupsNames = array(); foreach (\IPS\Member\Group::groups() as $group) { $groupsNames[] = $group->name; } $groupsAsString = implode(', ', $groupsNames); \IPS\Member::loggedIn()->language()->parseOutputForDisplay( $groupsAsString ); print $groupsAsString; Мультиязычно. 1 Поделиться сообщением Ссылка на сообщение
merciful 0 02.03.2016 20:24 Добрый день, Спасибо большое за подсказки выше, долго искал как сделать авторизацию на сайте (через логин на форуме). Все заработало, столкнулся только с одной проблемой, выкидывает из сессии (иногда). Стоит только вернуться на форум, как снова и на сайте все ок. Использую код: <?php require_once 'forum/init.php'; /* Инициализируем систему */ \IPS\Dispatcher\Front::i(); //or \IPS\Dispatcher\Build::i(); /* Получаем объект с данными о текущем пользователе */ $member = \IPS\Member::loggedIn(); Проверка, зарегистрирован пользователь или нет: if ($member->member_id) { форма с имением и выход. } Поделиться сообщением Ссылка на сообщение
siv1987 2 630 04.03.2016 20:35 /* Инициализируем систему */\IPS\Dispatcher\Front::i(); //\IPS\Dispatcher\Build::i();Кстати да, если нужен фреймворк форума именно как api, то лучше использовать для инициализации класс Build, или даже External. Front предназначен для публичной части форума с загрузкой css и js файлов и всякими проверками и ошибками, что в случае api для отдельного приложения не совсем желательно. Front имеет смысл использовать когда пишете в оболочки форума. И без вызова init(), этот метод вызывается автоматически из i(). столкнулся только с одной проблемой, выкидывает из сессии (иногда)Смотрите кукисы. В частности для повторной аутентификации после истечения сессии - pass_hash и member_id. 2 Поделиться сообщением Ссылка на сообщение
Dmitriy427 198 05.03.2016 03:21 По части проверок "Front" ограничивает только метод вывода данных, темплейты, скрипты и стили автоматом не подключаются, это уже "Controller". Что до API, он сильно сужает возможности работы с фреймворком. 1 Поделиться сообщением Ссылка на сообщение
Iluha32 0 05.01.2017 20:12 Добрый вечер, использовал данный код: <?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 и т.п.? Поделиться сообщением Ссылка на сообщение
siv1987 2 630 05.01.2017 21:19 Так вы уже получили данные текущего пользователя в объекте $member. Обращайтесь к данным пользователя как к обычным свойствам объекта - $member->member_id и тп. 1 Поделиться сообщением Ссылка на сообщение
Iluha32 0 07.01.2017 19:05 (изменено) Почему-то не срабатывает, он не видит эти данные. Я залил файл 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 случае? Изменено 7 января 2017 пользователем siv1987 Не нужно приводить портянки кода Поделиться сообщением Ссылка на сообщение
siv1987 2 630 07.01.2017 19:12 Я залил файл test.php на свой сайт по адресу: test.x.ru/У вас разные домены. Чтобы получить данные авторизованого пользователя с forum.x.ru на домене test.x.ru, куки должны быть глобальными. В противном случае они доступны только на устанавливаемом домене. В constants.php, в папке форума добавить define( 'COOKIE_DOMAIN', '.x.ru' );Где x.ru основной домен второго уровня. Поделиться сообщением Ссылка на сообщение
Iluha32 0 07.01.2017 19:27 (изменено) Создал файл constants.php в папке forum.x.ru Добавил содержимое: <?php define( 'COOKIE_DOMAIN', '.x.ru' ); ?> Почему-то ничего не изменилось( Изменено 7 января 2017 пользователем Iluha32 Поделиться сообщением Ссылка на сообщение