Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
finkelshtein

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

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

 

/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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...