Здравствуйте. Есть ли возможность изменять скин в зависимости от времени (допустим суток)? Я понимаю, что такая возможность в самом ipb не предусмотрена, но возможно есть контроллер который активирует тот или иной скин?
Или возможность внедрить код php непосредственно в шаблоны? но как? там ведь своя система макроопределений..
Одним словом за любые подсказки советы буду оч благодарен!
Страница 1 из 1
Изменение скина или элемента дизайна в зависимости от времени
#4
Отправлено 03 Сентябрь 2010 - 15:12
Если нужно менять именно скин, то смотрите этот вызов:
/admin/sources/classes/output/publicOutput.php
В нем есть строка:
По очереди вызываются перечисленные в массиве функции, пока какая-то не вернет результат. Т.е. можете вмешаться на любом этапе. Оптимальным будет поправить функцию _fetchSkinByDefault, чтобы пользователи могли при желании отключить автосмену скина и остановиться на каком-то одном любимом.
Эта функция имеет вид:
Как видим, два раза просматривается набор шаблонов, сначала ищется отмеченный "по-умолчанию". Если находится - он и возвращается. Иначе снова осужествляется проход по скинам и выбирается самый первый. Вмешаться просто. Допустим, у вас есть 4 скина:
id 4 - Ночь
id 5 - Утро
id 6 - День
id 7 - Вечер
Просто замените код функции на:
/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;
}
#6
Отправлено 03 Сентябрь 2010 - 15:48
Единственное замечу что так лучше делать времена года ))) Ведь время берётся сервера, хотя люди могут заходить из разных часовых поясов.
Мне кажется выходом может быть управление через JS: подменять нужную таблицу стилей в зависимости от времени.
Мне кажется выходом может быть управление через JS: подменять нужную таблицу стилей в зависимости от времени.
Сообщить об этой теме:
Страница 1 из 1









