Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: tunnin välein vaihtuva linkki

Pallo [14.04.2008 12:21:19]

#

Sivuni etusivulla on kohta, jossa pyörii linkkjä muille sivuille.
Aina kun etusivulle tullaan niin näytetään satunnainen linkki.
Nyt kuitenkin olisi ideana tehdä skripti joka hakisi tietyn linkin kellonajan
mukaan. Linkit on määritelty tiedostoon vaikkapa näin:

09:00<>http://linkki1
10:00<>http://linkki2
jne...

Eli jos kello on 09:00 - 10:00 välillä, niin näytetään linkki 1. klo. 10:00 - 11:00 näytetään siis linkki 2. Kuinka tälläinen tsydeemi olisi järkevintä toteuttaa?

Teuro [14.04.2008 12:49:43]

#

Yksi tapa on ottaa palvelimen kellosta time() funktiolla aika ja parsia siitä tunnit, jonka jälkeen switch case rakenteella oikea linkki peliin. Esim.

<?php
$tunti = date("h", time());

switch(tunti){
  case 1:
    $linkki = "http://www...";
    break;
  case 2:
    $linkki = "http://www...";
    break;
}

echo $linkki;
?>

Wizard [14.04.2008 13:03:01]

#

Hirveä switch rakenne, ei kannata.

Laita tiedosto muotoon:

0,otsikko1
1,otsikko2
2,otsikko3

Sen jälkeen lue tiedosto array muotoon ja etsi silmukalla (esim. foreach) oikea tunti jonka saat kuluvasta kellonajasta siis ihan date('H). Tai vielä parempi jos array on indeksoitu tuntien mukaan, ehdottomasti nopein tapa eikä tarvita edes silmukkaa.

Tuo pieni 'h' palauttaa kuluvan tunnin 12-tunnin kellon mukaan (1-12), iso H palauttaa sen 24 tuntisella kellolla (0-23).

Ja Teuron vinkistäkin voit oikaista suoraan ilman turhia muuttujia jos sen haluat tehdä vinkin mukaan eli:

<?php
switch(date('H')):
    case 0:
        // linkki 00:00 - 00:59
    break;

    case 1:
        // linkki 01:00 - 01:59
    break;
endswitch;
?>

Mut tuossa on 24 eri kohtaa...helpompaa jollain yksinkertaisemmalla silmukalla.

-W-

Lebe80 [14.04.2008 13:03:23]

#

Teuron tapaisesti kannattaa tehdä, mutta 24 eri vaihtoehtoa case-lauseella tuntuu melko kömpelöltä koodaukselta.

Laita tiedot array-muuttujaan ja ota tunnin mukaan oikea solu.

edit:
muutkin tuli mukaan
Wizard: Itse en missään nimessä pudottaisi muuttujaa pois jatkokehityksenkään kannalta. Itse laittaisin esim. muuttujaan pelkän urlin, joka tulostettaisiin vasta lopuksi html-linkkinä. Myöhemmin css-luokan lisääminen yms. vaatii paljon vähemmän vaivaa.

Teuro [14.04.2008 13:24:32]

#

Aivan arvelinkin tuon olevan kömpelö, joten hyvä että tuli parempi ratkaisu.

Wizard [14.04.2008 13:24:58]

#

Lebe80 kirjoitti:

Teuron tapaisesti kannattaa tehdä, mutta 24 eri vaihtoehtoa case-lauseella tuntuu melko kömpelöltä koodaukselta.

Laita tiedot array-muuttujaan ja ota tunnin mukaan oikea solu.

edit:
muutkin tuli mukaan
Wizard: Itse en missään nimessä pudottaisi muuttujaa pois jatkokehityksenkään kannalta. Itse laittaisin esim. muuttujaan pelkän urlin, joka tulostettaisiin vasta lopuksi html-linkkinä. Myöhemmin css-luokan lisääminen yms. vaatii paljon vähemmän vaivaa.

Viittaan turhalla muuttujalla tuohon $tunti muuttujaan. Tuosta switch rakenteesta heittäisin suoraan return käskyllä otsikon, koska käyttäisin luonnollisesti olio-ohjelmointia. ;)

Mutta helpoin tapa mielestäni olisi jotakuinkin näin:

Tiedostossa TASAN 24 riviä näin:

otsikko 00:00 - 00:59
otsikko 01:00 - 01:59
otsikko 02:00 - 02:59
otsikko 03:00 - 03:59

<?php

$lines = file('tiedosto.txt');
return $lines[date('H') + 1];

?>

Tuon pitäisi toimia noin ihan suoraan jos nyt oikein nuo funktioiden muodot muistan...

-W-

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta