Помогите с JavaScript

Собственно такая вот беда…
Необходимо сделать так, чтоб в зависимости от времени суток подгружался новый style.css

В сети я нашел такой вот яваскрипт. Но что-то никак не получается его заставить работать.

Вот сам скрипт:
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function getCSS()
{
datetoday = new Date();
timenow=datetoday.getTime();
datetoday.setTime(timenow);
thehour = datetoday.getHours();

if (thehour > 20)
display = "tree_twilight.css";
else if (thehour > 17)
display = "tree_sunset.css";
else if (thehour > 14)
display = "tree_afternoon.css";
else if (thehour > 11)
display = "tree_noon.css";
else if (thehour > 7)
display = "tree_morning.css";
else if (thehour > 4)
display = "tree_sunrise.css";
else if (thehour > 1)
display = "tree_twilight.css";
else
display = "tree_sunset.css";

var css = '<'; css+='link rel="stylesheet" href=' + display + ' \/'; css+='>';

document.write(css);
// End -->
}
</script>


Далее нужно вставить:
<script language="javascript">getCSS();</script>

Но что-то никак… =( основной скрипт я заключил в literal.
Но не могу разобраться. куда всовывать. В header вставляю, но не работает.
Пробовал в display ввести везде один путь до style.css. Не работает =( Помогите плиз люди добрые! Пробовал вставлять как до /head так и после.
Вторую частичку которая должна вывести *.css вставил вместо того что вело к style.css

21 комментарий

avatar
фу. цсс через жаваскрипт грузить некрасиво… я у себя так сделал
в файле /classes/modules/user/User.class.php в функции Shutdown () в самом конце дописал

   public function Shutdown() {
        if ($this->oUserCurrent) {
            $iCountTalkNew=$this->Talk_GetCountTalkNew($this->oUserCurrent->getId());
            $this->Viewer_Assign('iUserCurrentCountTalkNew',$iCountTalkNew);
        }        

		$iNowTime = date('G');
 		$this->Viewer_Assign('iNowTimeDay',$iNowTime);
    }

а в templates/skin/yourskin/header.tpl и header.light.tpl
после загрузки основной цсски что то такое


	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/style.css?v=1" />
	
		{if $iNowTimeDay > '8' and $iNowTimeDay <= '16' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/morning.css" />
	{elseif $iNowTimeDay > '16' and $iNowTimeDay <= '17' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/fall.css" />
	{elseif $iNowTimeDay > '17' and $iNowTimeDay <= '27' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/sumerki.css" />    
	{elseif ($iNowTimeDay > '27' and $iNowTimeDay <= '31') or ($iNowTimeDay >= '4' and $iNowTimeDay <= '8') }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/night.css" />
    {elseif $iNowTimeDay > '31' or ( $iNowTimeDay >= '0' and  $iNowTimeDay < '4')}
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/deep.css" />
	{/if}
  • Vilz
  • 0
avatar
Ох 0_о для моего мозга это сложно =) Я тольк начал изучать все это дело…

Если не ошибаюсь, то чтобы было по времени необходимо нада так?
$iNowTime = time('H');

Запутался =(

Яваскрипт выше понравился тем, что он берет время которое у посетителя…

avatar
G  	24-hour format of an hour without leading zeros  	0 through 23
h 	12-hour format of an hour with leading zeros 	01 through 12
H 	24-hour format of an hour with leading zeros 	00 through 23


хм… не, ну раз так то конечно. У меня то случай совсем другой, нужно именно время сервера…

а у вас там там явно в адресе проблема. есть где работающий сайт, файрбагом потыкать?

avatar
Ох ты =) Информативно спасибо!

Я на локалхосте пока что… Сначала хочу все до ума довести а патом в сети запускать =)

По тому, что Вы дали жу очень сильно выругался на меня =(
Парсеру не нравицо =(
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in Z:\home\localhost\www\classes\modules\user\User.class.php on line 66
avatar
вот так вроде бы функция целиком должна выглядеть…

public function Shutdown() {
        if ($this->oUserCurrent) {
            $iCountTalkNew=$this->Talk_GetCountTalkNew($this->oUserCurrent->getId());
            $this->Viewer_Assign('iUserCurrentCountTalkNew',$iCountTalkNew);
        }        

	$iNowTime = date('G');
 	$this->Viewer_Assign('iNowTimeDay',$iNowTime);

        $this->Viewer_Assign('oUserCurrent',$this->oUserCurrent);
    }
avatar
Ах да… Сстрана…
Извиняюсь натупил…

Значит теперь получается… Чтобы получить не дату а время нада поменять
$iNowTime = date('G');

date на time? Или нет =)
avatar
не не… date это всё целиком из неё можно достать всё хоть месяц, хоть секунды. G это часы в сутках — то что тебе надо. ты передал эту переменную в шаблон. в шаблоне с помощью ифов задаёшь в какое время какую цсску грузить
avatar
Панятна…
А можете разъяснить по какому приципу устраивать вывод теперь?

Выше в Вашем примере вижу что один *.css прописан а остальные по ифу… Я бы хотел сделать чтоб по ифу полностью был основной…
Я попробовал вот так:
{if $iNowTimeDay > '6' and $iNowTimeDay <= '10' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/morning_style.css" />
		{elseif $iNowTimeDay > '10' and $iNowTimeDay <= '19' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/day_style.css" />
	{elseif $iNowTimeDay > '19' and $iNowTimeDay <= '23' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/eve_style.css" />
	{elseif $iNowTimeDay > '0' and $iNowTimeDay <= '6' }
	<link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/night_style.css" />
	{/if}


Но что-то так не хочет…
avatar
Включился day_style.css я попробовал создать пост. время поста 19:37

А стиль day долженбыть до 19… Или я как всегда накосячил )
avatar
М… все разобрался =))))

Большое человеческое спасибо!

Будет возможность + в карму дам =)

avatar
у меня в первой цсске идёт вся основная инфа, а в остальных только то что относится к изменениям в зависимости от времени суток. первая закешируется а в остальных килобайт самое больше.
avatar
Ну тут ещё спорный вопрос, куда выносить, или в JS или в PHP данный код.
  • vist
  • 0
avatar
Мне такой вариант понравился больше =)
avatar
Какой?
avatar
Который дал Vilz =)
avatar
ну во первых зависит от того какое время нужно. мне серверное нужно было. а джаваскрипт время сервера точно никак не подхватит.
а кроме того джаваскрипт отрабатывает обычно после загрузки дом, соответственно цсска подхватится уже после основной загрузки, а это чревато непредсказуемыми последствиями в некоторых случаях
avatar
А я бы примерно так сделал:
var css = '<'; 
css+='link rel="stylesheet" href="time_css.php?hour=' + thehour + ' \/'; 
css+='>';
document.write(css);

И уже в пхп-файле разруливал бы, какую CSS-таблицу подключать
avatar
Ох, еслиб я умел =)
А можете посоветовать какую нибудь книжку с которой стоило бы начать?
avatar
Похвальное стремление!

Если вопрос про пхп, то я бы советовал взять «PHP5 в подлиннике» Дмитрия Котерова — это классика. А еще лучше — выкроить время и некоторую сумму денег, пойти в самый крупный книжный магазин в городе и зависнуть там часика на три внимательно перебирая книги по PHP, MySQL, javascript, CSS, HTML и т.д. Дело в том, что разные авторы, разные стили подачи материала по разному доходят до разных людей. Надо просто подобрать, что наиболее понятно и доходчиво лично для тебя.

У себя на компе (если под Виндами работаешь) надо поставить Денвер, если до сих пор не стоит (http://www.denwer.ru/). Ееще несколько советов и рекомендаций см. здесь: livestreet.ru/blog/1939.html

Все это, разумеется, если есть реальное желание чему-то научиться, а не так, вершки похватать.
avatar
Большое спасибо =) Завтра пойду в магазин =)

Да денвер стоит =)

Вобще стремлению изучить все глубже появилось благодаря ЖУ =)
До этого юзал ДЛЕ… там все проще было =) Ну я вобще рад что нашел ЖУ =) Вижу она мне сулит много хорошего =)
avatar
{if $iNowTimeDay > '6' and $iNowTimeDay <= '10' }
        <link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/morning_style.css" />
                {elseif $iNowTimeDay > '10' and $iNowTimeDay <= '19' }
        <link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/day_style.css" />
        {elseif $iNowTimeDay > '19' and $iNowTimeDay <= '23' }
        <link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/eve_style.css" />
        {elseif $iNowTimeDay > '0' and $iNowTimeDay <= '6' }
        <link rel="stylesheet" type="text/css" href="{$DIR_STATIC_SKIN}/css/night_style.css" />
        {/if}

Гмм… Странная беда. Мучаю, мучаю а вот night_style отказывается выводить =( Все отсальное работает отлично по времени, а вот на последнем тупо игнорит и вобще никакой *.css не подключает. Не могу никак понять в чем беда…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.