Перейти к публикации
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.

Вывод данных

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

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

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

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

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

Кешировать блок можно так:

$output = ''; //Эта переменная может уже содержать какой-то html-код, сюда будем добавлять html виджета.
$ttl = \IPS\Settings::i()->widget_cache_ttl ?: 300;

if ( ! isset( \IPS\Data\Store::i()->topicFeed ) or \IPS\Data\Store::i()->topicFeed['built'] < ( time() - $ttl ) )
{
$widget = \IPS\Widget::load( \IPS\Application::load( 'forums' ), 'topicFeed', uniqid(), array() )->render();
\IPS\Member::loggedIn()->language()->parseOutputForDisplay( $widget );
\IPS\Data\Store::i()->topicFeed = array( 'built' => time(), 'html' => $widget );
}

$output .= \IPS\Widget::parseOutput( \IPS\Data\Store::i()->topicFeed['html'] );

Интервал обновления кеша берётся из этой настройки:

post-47391-0-28534100-1500957255_thumb.jpg

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

Спасибо, вроде все работает, только все равно не понятно этот же блок на странице форума создает 5 запросов до кеша, а на отдельной странице аж 11 (( а что обозначает в этом коде вот это built?

Изменено пользователем avgaz

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

На страницах форума объект формируемый методом \IPS\Application::load( 'forums' ) грузится по дефолту и блок использует его данные. Запросов, в сумме, создаётся не меньше.

 

"built" - переменная содержащая unix timestamp - временнАя метка, используется для вычисления, нужно ли обновлять кеш при очередной загрузке страницы.

  • 2 недели спустя...
Опубликовано:
  • Автор

<?php

require_once 'forum/init.php';
\IPS\Dispatcher\External::i();
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->globalTemplate( 'Page Title', 'Page Content', array( 'app' => \IPS\Dispatcher::i()->application->directory, 'module' => \IPS\Dispatcher::i()->module->key, 'controller' => \IPS\Dispatcher::i()->controller ) ) );

А как вывести, что бы такая страница грузилась в определенной теме, не которая по умолчанию стоит?

Опубликовано:
\IPS\Theme::i()->id

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

Спасибо

Изменено пользователем avgaz

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

Составьте условие

if (\IPS\Theme::i()->id == 3)
{
// отображать информацию в стиле с ID 3
}

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

Спасибо разобрался с этим.

Появился ещё вопрос, как сделать что бы на таких страницах не отображалась реклама добавленная в позиции Just below the page header

и Just above the page footer

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

Появился ещё вопрос, как сделать что бы на таких страницах не отображалась реклама добавленная в позиции

- вырезать из html перед выводом

- скрывать через css

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

А в шаблоне не определить что находишься на это странице и условие не составить?

Например

array( 'app' => "portal", 'module' => \IPS\Dispatcher::i()->module->key, 'controller' => \IPS\Dispatcher::i()->controller ) ) );

а в шаблоне условие что типа

if(app == "potal"){

условие

}

может можно что то подобное сделать?

 

И еще вопрос можно в шаблоне как то составить условие что если пользователь с мобильного и использует такой то стиль, то вывести тот то??

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

А в шаблоне не определить что находишься на это странице и условие не составить?

 

Про шаблон не было и речи в вопросе.

Если так

array( 'app' => "portal", 'module' => \IPS\Dispatcher::i()->module->key, 'controller' => \IPS\Dispatcher::i()->controller ) ) );

то

{{if $location['app'] == "portal"}}Код{{endif}}

Вообще можно свой ключ добавить

array( 'some_key' => "some_value", 'app' => "portal", 'module' => \IPS\Dispatcher::i()->module->key, 'controller' => \IPS\Dispatcher::i()->controller ) ) );

Далее в шаблоне проверяем

{{if isset($location['some_key']) and $location['some_key'] == "some_value"}}Код{{endif}}

 

И еще вопрос можно в шаблоне как то составить условие что если пользователь с мобильного и использует такой то стиль, то вывести тот то??

{{if \IPS\Member::loggedIn()->skin == 1 and \IPS\Http\Useragent::parse()->mobile}}Код{{endif}}

  • 6 месяцев спустя...
Опубликовано:

Здравствуйте, проблема на самописном портале!

 

/*

* Authorization

* @return \IPS\Member|false

*/

function doLogin( $username, $password, $rememberMe=true, $anonymous=false )

{

$login = new \IPS\Login( \IPS\Http\Url::internal('') );

$login->forms();

 

try{

$member = $login->authenticateStandard(array(

'auth' => $username,

'password' => $password,

));

}

catch( \IPS\Login\Exception $e )

{

return false;

}

 

if ( $anonymous and !\IPS\Settings::i()->disable_anonymous )

{

\IPS\Session::i()->setAnon();

\IPS\Request::i()->setCookie( 'anon_login', 1 );

}

 

\IPS\Session::i()->setMember( $member );

 

if ( $rememberMe )

{

$expire = new \IPS\DateTime;

$expire->add( new \DateInterval( 'P7D' ) );

\IPS\Request::i()->setCookie( 'member_id', $member->member_id, $expire );

\IPS\Request::i()->setCookie( 'pass_hash', $member->member_login_key, $expire );

 

if ( $anonymous and !\IPS\Settings::i()->disable_anonymous )

{

\IPS\Request::i()->setCookie( 'anon_login', 1, $expire );

}

}

 

$member->memberSync( 'onLogin', array( \IPS\Login::getDestination() ) );

 

return $member;

}

 

/*

* Logout

* @return void

*/

function logout()

{

$redirectUrl = \IPS\Http\Url::internal( '' );

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

 

/* Are we logging out back to an admin user? */

if( isset( $_SESSION['logged_in_as_key'] ) )

{

$key = $_SESSION['logged_in_as_key'];

unset( \IPS\Data\Store::i()->$key );

unset( $_SESSION['logged_in_as_key'] );

unset( $_SESSION['logged_in_from'] );

 

return;

}

 

\IPS\Request::i()->setCookie( 'member_id', NULL );

\IPS\Request::i()->setCookie( 'pass_hash', NULL );

\IPS\Request::i()->setCookie( 'anon_login', NULL );

 

foreach( \IPS\Request::i()->cookie as $name => $value )

{

if( mb_strpos( $name, "ipbforumpass_" ) !== FALSE )

{

\IPS\Request::i()->setCookie( $name, NULL );

}

}

 

session_destroy();

 

/* Login handler callback */

foreach ( \IPS\Login::handlers( TRUE ) as $k => $handler )

{

try

{

$handler->logoutAccount( $member, $redirectUrl );

}

catch( \BadMethodCallException $e ) {}

}

 

/* Member sync callback */

$member->memberSync( 'onLogout', array( $redirectUrl ) );

}

 

Использую данные функции для подключения и отключения, так вот всё работает хорошо!

Но стоит авторизоваться через форум с использованием Запомнить Меня, после этого на главной нажать выйти.

И мы действительно вышли, можно даже обновить страничку, но стоит нам только зайти на форум, как мы снова авторизированы тут, как бы решить эту проблему.

 

Сразу говорю, интересует реальное решение этой проблемы, что то вроде выпилить эту кнопку - не вариант!

Изменено пользователем Stinger2015

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

Но стоит авторизоваться через форум с использованием Запомнить Меня, после этого на главной нажать выйти.

И мы действительно вышли, можно даже обновить страничку, но стоит нам только зайти на форум, как мы снова авторизированы тут, как бы решить эту проблему.

Начиная с какой-то (не помню точно) версии куки pass_hash была убрана и добавлены 2 новые: device_key и login_key (устанавливается при "Запомнить Меня").

Плюс "пришли девайсы".

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

Спасибо, решено использованием login_key, подскажите пожалуйста, как получить результат авторизации а именно сообщение, успешная авторизация или же аккаунт заблокирован на нное кол-во попыток ввода или успех, вообщем это сообщение, в ipb 3.4 это получалось так!

 

$ret = $apiMember->login( $ips_username, $ips_password );

$result = $ret[2];

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

подскажите пожалуйста, как получить результат авторизации а именно сообщение, успешная авторизация или же аккаунт заблокирован на нное кол-во попыток ввода или успех, вообщем это сообщение, в ipb 3.4 это получалось так!

try
{
$member = $login->authenticateStandard(array(
	'auth' => $username,
	'password' => $password,
));
}
catch( \IPS\Login\Exception $e )
{
// Здесь ловим ошибки. Например, сообщение через $e->getMessage()
return false;
}

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

Сейчас на странице 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.