Изменение скина или элемента дизайна в зависимости от времени - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы оформления форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Оформление форумов IPB 2.x.
Настройка форумов, включая установку и техническую настройку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены
Страница 1 из 1
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

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

#1 Пользователь не на сайте   finkelshtein 

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 10
  • Регистрация: 02-Сентябрь 10
  • IPB version:3.1.x
 

Отправлено 03 Сентябрь 2010 - 14:31

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

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

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

#2 Пользователь не на сайте   Fisana 

 
 
  • На PM не отвечаю
  • Смотреть блог
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 12 454
  • Регистрация: 21-Ноябрь 05
  • Откуда:Из интернетов
  • IPB version:3.1.x
 

Отправлено 03 Сентябрь 2010 - 14:35

Есть возможность. Видела.
Но не умею, так как не просил никто и не пыталась сама.
Наверняка Ritsuka знает, как сделать.
0

#3 Пользователь не на сайте   finkelshtein 

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 10
  • Регистрация: 02-Сентябрь 10
  • IPB version:3.1.x
 

Отправлено 03 Сентябрь 2010 - 14:41

Просмотреть сообщениеFisana 03 Сентябрь 2010 - 14:35 сказал(а):

Есть возможность. Видела.
Но не умею, так как не просил никто и не пыталась сама.
Наверняка Ritsuka знает, как сделать.


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

#4 Пользователь не на сайте   Ritsuka 

 
 
  • Advanced
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 681
  • Регистрация: 08-Июнь 09
  • IPB version:3.2.x
 

Отправлено 03 Сентябрь 2010 - 15:12

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

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

1

#5 Пользователь не на сайте   finkelshtein 

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 10
  • Регистрация: 02-Сентябрь 10
  • IPB version:3.1.x
 

Отправлено 03 Сентябрь 2010 - 15:23

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

#6 Пользователь не на сайте   finkelshtein 

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 10
  • Регистрация: 02-Сентябрь 10
  • IPB version:3.1.x
 

Отправлено 03 Сентябрь 2010 - 15:48

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

Сообщить об этой теме:


Страница 1 из 1
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Заказ дизайна форума

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2012 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна