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

Изменение скина или элемента дизайна в зависимости от времени

Recommended Posts

Здравствуйте. Есть ли возможность изменять скин в зависимости от времени (допустим суток)? Я понимаю, что такая возможность в самом ipb не предусмотрена, но возможно есть контроллер который активирует тот или иной скин?

 

Или возможность внедрить код php непосредственно в шаблоны? но как? там ведь своя система макроопределений..

 

Одним словом за любые подсказки советы буду оч благодарен!

Share this post


Link to post
Share on other sites

Есть возможность. Видела.

Но не умею, так как не просил никто и не пыталась сама.

Наверняка Ritsuka знает, как сделать.

Share this post


Link to post
Share on other sites

Есть возможность. Видела.

Но не умею, так как не просил никто и не пыталась сама.

Наверняка Ritsuka знает, как сделать.

 

Спасибо! Спросил через приват

Share this post


Link to post
Share on other sites

Если нужно менять именно скин, то смотрите этот вызов:

 

/admin/sources/classes/output/publicOutput.php

	/**
 * Fetch a skin based on user's incoming data (user-agent, URL) or via other params
 *
 * The priority chain goes like this:
 *
 * Incoming Gateway file (index.php / xml.php / rss.php, etc) filters out some skins, then:
 * - User Agent
 * - URL Remap
 * - App Specific
 * - Member specific
 * - Default skin
 *
 * @access	protected
 * @return	int			ID of skin to use
 */
protected function _fetchUserSkin()

 

В нем есть строка:

		foreach( array( '_fetchSkinByUserAgent', '_fetchSkinByURLMap', '_fetchSkinByApp', '_fetchSkinByMemberPrefs', '_fetchSkinByDefault' ) as $function )
	{
		$useSkinID = $this->$function();

		if ( $useSkinID !== FALSE )
		{
			break;
		}
	}

 

По очереди вызываются перечисленные в массиве функции, пока какая-то не вернет результат. Т.е. можете вмешаться на любом этапе. Оптимальным будет поправить функцию _fetchSkinByDefault, чтобы пользователи могли при желании отключить автосмену скина и остановиться на каком-то одном любимом.

 

Эта функция имеет вид:

	private function _fetchSkinByDefault()
{
	$useSkinID = FALSE;

	/* Got one set by default for this gateway? */
	foreach( $this->allSkins as $data )
	{
		/* Can use with this output format? */
		if ( $data['_gatewayExclude'] !== FALSE )
		{
			continue;
		}

		if ( $data['set_is_default'] )
		{
			$useSkinID = $data['set_id'];
			break;
		}
	}

	/* Did we get anything? */
	if ( $useSkinID === FALSE )
	{
		foreach( $this->allSkins as $data )
		{
			/* Can use with this output format? */
			if ( $data['_gatewayExclude'] !== FALSE )
			{
				continue;
			}

			/* Grab the first one */
			$useSkinID = $data['set_id'];
			break;
		}
	}

	IPSDebug::addMessage( "Skin set not found, setting default. Using set #" . $useSkinID );

	return $useSkinID;
}

 

Как видим, два раза просматривается набор шаблонов, сначала ищется отмеченный "по-умолчанию". Если находится - он и возвращается. Иначе снова осужествляется проход по скинам и выбирается самый первый. Вмешаться просто. Допустим, у вас есть 4 скина:

id 4 - Ночь

id 5 - Утро

id 6 - День

id 7 - Вечер

 

Просто замените код функции на:

	private function _fetchSkinByDefault()
{
               switch(intval(date("H")))
	{
		case 0: case 1: case 2: case 3: case 4: case 5:
			$useSkinID = 4; break;
		case 6: case 7: case 8: case 9: case 10: case 11:
			$useSkinID = 5; break;
		case 12: case 13: case 14: case 15: case 16: case 17:
			$useSkinID = 6; break;
		case 18: case 19: case 20: case 21: case 22: case 23:
			$useSkinID = 7; break;

	}
	return $useSkinID;
}

  • Upvote 1

Share this post


Link to post
Share on other sites

Фактически готовое решение! Большое спасибо!

Share this post


Link to post
Share on other sites

Единственное замечу что так лучше делать времена года ))) Ведь время берётся сервера, хотя люди могут заходить из разных часовых поясов.

Мне кажется выходом может быть управление через JS: подменять нужную таблицу стилей в зависимости от времени.

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