Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
avgaz

Вывод данных

Recommended Posts

Дак если создать блок на базе виджета, то там нет кеширования, там кеширование только при создании своего блока (Custom. You can author HTML or PHP) на блоках Plugins нет настройки кеширования

И для этого нужно, что бы был установлено приложение pages, а если его установить то по умолчанию добавляется на такие страницы ещё 2 запроса в БД независимо используешь его блоки или нет ((

вот такие

(read): SELECT cms_pages.*, core_permission_index.perm_id, core_permission_index.perm_view, core_permission_index.perm_2, core_permission_index.perm_3, core_permission_index.perm_4, core_permission_index.perm_5, core_permission_index.perm_6, core_permission_index.perm_7 FROM `ibf_cms_pages` AS `cms_pages`  LEFT JOIN `ibf_core_permission_index` AS `core_permission_index` ON core_permission_index.app='cms' AND core_permission_index.perm_type='pages' AND core_permission_index.perm_type_id=cms_pages.page_id WHERE cms_pages.page_full_path=''
(read): SELECT page_id FROM `ibf_cms_pages` AS `cms_pages` WHERE page_default=1 AND page_folder_id=0

Share this post


Link to post
Share on other sites

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

$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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

Edited by avgaz

Share this post


Link to post
Share on other sites

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

 

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
\IPS\Theme::i()->id

Share this post


Link to post
Share on other sites

Спасибо

Edited by avgaz

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

и Just above the page footer

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Например

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

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

if(app == "potal"){

условие

}

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Если так

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}}

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

/*

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

}

 

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

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

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

 

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

Edited by Stinger2015

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

$result = $ret[2];

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...