Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужно править JS и вправить в PHP (https://javascript.ru/forum/misc/3383-nuzhno-pravit-js-i-vpravit-v-php.html)

aforse 14.04.2009 21:10

Нужно править JS и вправить в PHP
 
Здравствуйте! Мне нужна помощь, а заключается она в том, что нужно изменить JS и заставить его работать в шаблоне.

Код:

<HTML>
  <HEAD>
      <Script type="text/JavaScript">
      function change() {
      today    = new Date()
      tday    = today.getDate()
      tmonth  = today.getMonth()+1
        if (tday==29 && tmonth==3)
            {document.logo.setAttribute('src','1.jpg')}
        else
            {document.logo.setAttribute('src','2.jpg')}}
      </Script>
  </HEAD>
  <BODY onLoad="change()">
      <img src="3.jpg" name="logo">
  </body>
</html>


Этот скрипт в зависимости от даты ставит разные картинки.

Буду перечислять проблемки. :(

1) Т.к. дат может быть много, то оператор If будет повторятся неоднократно. Возможно ли это переделать с применением оператора Case, если таков существует? (плз, в примере используйте более 2х дат)

2) Нужно изменить так скрипт, чтоб он не изменял название картинки, а стиль, т.е. есть ссылка, на фоне которой, будет стоять та или ина картинка в зависимости от даты.

Вот привожу часть кода с CSS:

Код:

h1.logo a {
        width: 290px;
        display: block;
        background: url(../images/logo.png) no-repeat;
        position: absolute;
        height: 120px;
        bottom: 0px;
        left: 350px;
}


и часть кода из шаблона:

Код:

<h1 class="logo">
      <a href="index.php" title="<?php echo $siteName; ?>">
            <span>
                  <?php echo $siteName; ?>
            </span>
      </a>
</h1>


Нужно сделать соответственные изменения в этих урывках.

Если Вам не составит труда отвечать готовым кодом, то я буду очень рад.
Заранее спасиБо.

Riim 14.04.2009 22:22

Вот одного ни как не могу понять: почему некоторым проще спросить на форуме и часами ждать ответа, вместо того чтобы найти его в любом поисковике за 30 секунд?

Kolyaj 14.04.2009 22:48

Прямо ТЗ, только че-та без размера оплаты ))

art-danilov 15.04.2009 10:54

Цитата:

Сообщение от Riim (Сообщение 16615)
Вот одного ни как не могу понять: почему некоторым проще спросить на форуме и часами ждать ответа, вместо того чтобы найти его в любом поисковике за 30 секунд?

А для чего форум существует? ) По статистике 99% обсуждаемых вопросов уже когда-то были и ответы на них есть в гугле, может форум не нужен? :)

Riim 15.04.2009 11:00

Цитата:

Сообщение от art-danilov
А для чего форум существует? ) По статистике 99% обсуждаемых вопросов уже когда-то были и ответы на них есть в гугле, может форум не нужен?

Ну, второй вопрос еще норм, а вот первому здесь явно не место. Слишком уж легко он находится в поисковиках.

aforse 15.04.2009 19:46

Мда... я на следующий день сидел искал на форумах и сайтах. Много чего нашел, а то что мне нужно - увы.

Я не спец вообще в ЯС: чет могу по примерам сделать, но достаточно геморно собрать с кучи примеров нужный скрипт. Потому и задаю вопрос на форуме в надежде, что кто-то поможЕт.

Kolyaj 15.04.2009 20:46

Цитата:

Сообщение от aforse
Потому и задаю вопрос

Задание вижу, вопроса не вижу.

aforse 16.04.2009 17:33

В общем я немножко разобрался, и у меня возник такой вопрос:
как можно совместить эту часть скрипта:
<Script type="text/JavaScript">
      function change() {
      today    = new Date()
      tday     = today.getDate()
      tmonth   = today.getMonth()+1

и этой
switch ( xxx )
         case ( ??? ) : [команда/действие]; break;
         case ( ??? ) : [команда/действие]; break;
         default : [команда/действие];
}

я не знаю как преобразовать tday и tmonth в одну переменную чтоб подставить ее вместо ( ххх ), а вместо ( ??? ) подставлять число соответствующее конкретной дать; как я выяснил єто не прокатИт:
switch ( tday, tmonth )
         case ( 31, 5 ) : [команда/действие]; break;
         case ( 13, 11 ) : [команда/действие]; break;
         default : [команда/действие];

AzriMan 17.04.2009 16:33

символом конкатенации служит значек плюса "+".
а подставить в виде (31, 5) нельзя. можно сделать ("31, 5") - тогда это будет сравнение строк.

или что вообще нужно? немного не понятен вопрос.

aforse 18.04.2009 11:09

Цитата:

Сообщение от AzriMan (Сообщение 16891)
или что вообще нужно? немного не понятен вопрос.

Мне нужно преобразовать 2е переменных в одну для подальшого использования.

Вот смотри:
<Script type="text/JavaScript">
 function change() {
  today  = new Date()
  tday   = today.getDate()
  tmonth = today.getMonth()+1

  if (tday<10) 
   {td = 0 + tday}
  else 
   {td = tday}

  if (tmonth<10) 
   {tm = 0 + tmonth}
  else 
   {tm = tmonth}

  tdtm = [здес операция с td и tm]

  switch (tdtm) {
   case (1704) : document.logo.setAttribute('src','1.jpg'); break;
   case (1804) : document.logo.setAttribute('src','2.jpg'); break;
   default : document.logo.setAttribute('src','3.jpg');
  }
 }
</Script>




У нас 18 число, 4 месяц, в этой части
if (tmonth<10) 
   {tm = 0 + tmonth}
  else 
   {tm = tmonth}

значение месяца - 4, преобразуется в 04, тогда выходит, что td = 18, а tm = 04

Дальше мне нужно преобразовать эти две переменные в одну - tdtm, так чтоб значение tdtm = 1804 (и не знаю кАк) :(

Riim 18.04.2009 12:15

aforse,
Прикалываешься или серьезно?

tdtm = td + tm;

Kolyaj 18.04.2009 12:17

Цитата:

Сообщение от aforse
а tm = 04

Нет такого числа :)

Цитата:

Сообщение от aforse
Дальше мне нужно преобразовать эти две переменные в одну - tdtm, так чтоб значение tdtm = 1804 (и не знаю кАк)

td * 100 + tm

Kolyaj 18.04.2009 12:18

Цитата:

Сообщение от Riim
tdtm = td + tm;

tdtm = '' + td + tm;

Riim 18.04.2009 12:19

Цитата:

Сообщение от Kolyaj
Нет такого числа

Там он видимо хотел строку делать.
upd:

Цитата:

Сообщение от Kolyaj
tdtm = '' + td + tm;

В смысле еще до tdtm = '' + td + tm;

Здесь: '0' + td

Riim 18.04.2009 12:20

И хватит все переменные в window пихать.

x-yuri 19.04.2009 00:07

aforse, а что за картинки?
p.s. лучше задай id="logo" и document.getElementById('logo')

aforse 20.04.2009 12:13

Вот уменьшил количество переменных, по сравнению с предыдущим кодом :)
<Script type="text/JavaScript">
 function change() {
  today  = new Date()
  tday   = today.getDate()
  tmonth = today.getMonth()+1

  if (tday<10) 
   {dt = 0 + tday * 100 + tmonth}
  else 
   {dt = tday * 100 + tmonth}
 
  switch (dt) {
   case (2004) : document.logo.setAttribute('src','1.jpg'); break;
   case (2104) : document.logo.setAttribute('src','2.jpg'); break;
   default : document.logo.setAttribute('src','3.jpg');
  }
 }
</Script>



Цитата:

Сообщение от x-yuri (Сообщение 17087)
aforse, а что за картинки?

Должны были замечать, что гугл, в зависомости от праздника, ставит разные картинки на главной странице; вот этот скрипт и будет выполнять такие операции :)


Цитата:

Сообщение от x-yuri (Сообщение 17088)
лучше задай id="logo" и document.getElementById('logo')

Я правильно понял? Вот здесь я добавляю id="logo":
<a id="logo" href="index.php" title="<?php echo $siteName; ?>">

в скрипт добавляю стороку document.getElementById('logo'):
function change() {
  today  = new Date()
  tday   = today.getDate()
  tmonth = today.getMonth()+1
document.getElementById('logo')

и это:
document.logo.setAttribute('src','1.jpg');

заменяю на эТо?
logo.style.backgroundImage = 'url(../images/1.jpg)';

aforse 20.04.2009 12:49

Есть! Вот рабочий скрипт :dance: :
<Script type="text/JavaScript">
 function change() {
  today  = new Date()
  tday   = today.getDate()
  tmonth = today.getMonth()+1

  document.getElementById('logo')

  if (tday<10) 
   {dt = 0 + tday * 100 + tmonth}
  else 
   {dt = tday * 100 + tmonth}
 
  switch (dt) {
   case (2004) : logo.style.backgroundImage = 'url(1.jpg)'; break;
   case (2104) : logo.style.backgroundImage = 'url(2.jpg)'; break;
   default : logo.style.backgroundImage = 'url(3.jpg)';
  }
 }
</Script>


<body onLoad="change()">
   <a id="logo" href="####" title="Ыы">Йа ссылКо</a>
</body>


Всем спасибо за помоЩь!!! :thanks:

AzriMan 20.04.2009 17:53

if (tday<10) 
   {dt = 0 + tday * 100 + tmonth}


а зачем добавлять ноль в начале?

имелось ввиду, если делать сложение строк (а не чисел), тогда нужен был бы ноль, точнее даже не ноль как число а ноль как символ ('0')

if (tday<10) 
   {dt = '0'+tday + tmonth}
  else 
   {dt = ''+tday + tmonth}


'' (два одинарных апострофа, а не кавычки) нужно для того, что бы dt был преобразован сразу к строковому типу.

но в этом случае в case нужно будет проверять не числа а строки: '2002', '2104', ...

x-yuri 21.04.2009 04:09

Цитата:

Я правильно понял? Вот здесь я добавляю id="logo":
неправильно
document.logo.setAttribute('src','1.jpg'); -> document.getElementById('logo').setAttribute('src' ,'1.jpg');
причем даже можно так
document.getElementById('logo').src = '1.jpg'

Цитата:

Должны были замечать, что гугл, в зависомости от праздника, ставит разные картинки на главной странице; вот этот скрипт и будет выполнять такие операции
лучше эту задачу на сервере решать, имхо: в бд сделать таблицу с очередью картинок для дат, а при генерации страницы показывать нужную картинку

aforse 21.04.2009 13:18

Цитата:

Сообщение от x-yuri (Сообщение 17195)
лучше эту задачу на сервере решать, имхо: в бд сделать таблицу с очередью картинок для дат, а при генерации страницы показывать нужную картинку

Знаю, только я еще не умею работать с БД, во всяком случае не знаю как это сделаТь :(

Riim 21.04.2009 13:29

Цитата:

Сообщение от aforse
лучше эту задачу на сервере решать, имхо: в бд сделать таблицу с очередью картинок для дат, а при генерации страницы показывать нужную картинку

Я бы все же на клиенте сделал. Зачем лишний раз сервер грузить. Главное src подставлять не при onload, а при DOMContentLoaded. К тому же если понадобится менять картинку в зависимости не от даты, а от времени суток, то при смене через сервер придется целую систему изобретать.

x-yuri 21.04.2009 18:23

ну лично, я не вижу где тут можно грузить сервер, разве что если на данный момент динамических страниц нету (которые на сервере генерируются) или БД не используется. Хотя даже в этих случаях я не могу сказать заранее будет ли заметно "не грузить сервер". А плюсы у серверного решения следующие: 1) удобный интерфейс для назначения картинок (не надо редактировать файлы); 2) для отображения картинок не нужен javascript (я знаю, что можно сказать в ответ на этот пункт :yes:); 3) по-моему еще что-то в голову приходило, не помню :(

Riim 21.04.2009 19:02

Цитата:

Сообщение от x-yuri
я не могу сказать заранее будет ли заметно "не грузить сервер"

Сайт - это целый ряд подобных решений. Если сэкономить немного на каждом, то может что-то и станет заметно. Хотя я и сам в это с трудом верю.
Но все равно сделал бы javascript-ом. Просто смена картинок - это такая мелочь, на которую даже 5 минут потратить жалко. А тем более работать с базой и еще создавать интерфейс для назначения картинок. Разве, что после того как сайт будет доведен до идеала. Но разве такое бывает? Всегда найдется что-то более важное, на что лучше потратить время.

upd: в общем мне тупо лень :)


Часовой пояс GMT +3, время: 12:32.