PHP Kalenteri, johon voi tehdä muistiinpanoja/merkintöjä/tms. Koodi ottaa huomioon karkauspäivät ym.
DEMO löytyy osoitteesta: http://kirbo.homeunix.com/kirbo/kalenteri/
CHANGELOG:
12.03.2008
- Lisäsin muutaman "konffin" tohon alkuun, että saa helposti esim viikonlopun tulostamisen, tai viikkonumeron tulostamisen pois näkyvistä, jos sitä haluaa.
- Lisäsin Demo sivulle mahdollisuuden testata eri "konffi asetuksia"
INDEX.PHP
<?php $show_weekend = 1; # Naytetaanko viikonloppu vai ei. 0 = ei nayteta, 1 = naytetaan $show_week = 1; # Naytetaanko viikkojen numerot $show_days = 1; # Naytetaanko kalenterin ylapuolella "Vk, Ma, Ti, Ke, To, Pe" ohjetekstit $show_month = 1; # Naytetaanko kalenterin ylapuolella Kuukausi ja vuosi $show_kuu = 1; # Tulostetaanko kuukausi 'kuu' paatteen kanssa vai ilman; "Heinakuu" vai "Heina" #----------------------------------------------------------------------------------------------------------------------# #----------------------------------------------------------------------------------------------------------------------# #----------------------------------------------------------------------------------------------------------------------# $pv = date('d'); # Nykyinen paiva $month = date('n'); # Nykyinen kuukausi $year = date('Y'); # Nykyinen vuosi # Nokkelimmat sitten osaavatkin tehda tahan itselleen $_GET tai $_POST muuttujilla kikkareen, etta kayttaja voi # helposti jonkinlaisen graafisen kayttoliittyman kautta vaihtaa naytettavan kuukauden # Kuukaudet suomennettuna, ilman "kuu" paatetta $kuukausi = array('Tammi', 'Helmi', 'Maalis', 'Huhti', 'Touko', 'Kesä', 'Heinä', 'Elo', 'Syys', 'Loka', 'Marras', 'Joulu'); # Muutama muistiinpano/tehtava/merkinta, nokkelimmat sitten osaakin tehda tahan kohtaan omaa kayttoaan varten # sopivanlaisen koodin joka hakee merkinnat. On se sitten MySql tietokannasta tai txt/tms tiedostosta mista tieto haetaan. # Alla olevat 4 esimerkkia siis saa poistaa, ne ovat vain esimerkkina mista minun koodissani merkinnat tarkistetaan. $merkki[1] = 'Muista tehda diiba daaba...'; $merkki[11] = 'gaerg aerg aerg a'; $merkki[14] = 'ajajaja'; $merkki[15] = 'ryssbyybsrtys ysrtysb<br>hsrthsth<br>hsrthsrtgergaeb aerg erg aergaer ge'; $merkki[27] = 'ajajajetartaert aert aertertaer taert aerterta'; # Funktio joka tekee "div layerin", missa nakyy kyseisen paivan muistiinpano function div($date, $pvm, $tieto) { # Maaritetaan $return muuttujan arvo $return = "<div id='div$date' style='display: none;' class='kelluva'><p>$pvm</p>$tieto</div>"; # Palautetaan $return arvo return $return; } # Haetaan nykyisen kuun ensimmainen paiva ja tietoja siita $firstday = mktime(0, 0, 0, $month, 1, $year); $firstday = getdate($firstday); # Haetaan kuun ensimmaisen paivan maaritys "wday", eli mika paiva on kyseessa, normaalisti arvot ovat 0-6, # mutta minulla ne ovat 1-7, eli jos "wday" on 0, se korvataan arvolla 7 $ekapaiva = $firstday['wday']; if ($ekapaiva == 0) { $ekapaiva = 7; } # Muutetaan edellisen kuun viimeinen paiva ja taman kuun viimeinen paiva unix_timestamp muotoon $vikapaiva = mktime(0, 0, 0, $month, 0, $year); $montakopaivaa = mktime(0, 0, 0, $month+1, 0, $year); # Lasketaan montako viikkoa pitaa tulostaa, jos summa on alle 5, annetaan arvoksi 5 $viikkoja = ceil((date('d', $montakopaivaa)+($ekapaiva-1))/7); if ($viikkoja < 5) { $viikkoja = 5; } # Lasketaan mista paivasta lahtien tulostetaan edellisen kuukauden paivat etta saadaan kokonainen ensimmainen viikko $edellinenpaiva = (date('d', $vikapaiva)-($ekapaiva-2)); $viimenenpaiva = date('d', $montakopaivaa); # Karsitaan viikkonumerosta alku nolla pois ja maaritetaan muutama muuttuja $viikko = ltrim(date('W', $vikapaiva), 0); $date = 1; $paiva = 1; # Nykyisen paivan unix_timestamp $now = mktime(0, 0, 0, $month, 1, $year); ?> <html> <head> <link rel="stylesheet" type="text/css" href="main.css"> <script language="JavaScript" type="text/javascript"> function hover(thisID, thisClass) { // Maaritetaan dom muuttuja var dom = 'div' + thisID; // Maaritetaan CSS CLASS:it ja DISPLAY arvot if (thisClass == 'over') { var harr = ''; var hover = 'hover'; } else { var harr = 'none'; var hover = thisClass; } // Tarkistetaan minkalaista javascriptia selain tukee if (document.getElementById) { // DOM3 = IE5, NS6 // Tarkistetaan loytyyko kyseiselle paivalle merkintaa/muistiinpanoa if (document.getElementById(dom)) { // Jos loytyy niin naytetaan se document.getElementById(dom).style.display = harr; } // Muutetaan "valitun" paivamaaran CSS CLASS document.getElementById(thisID).className = hover; } else { if (document.layers) { // Netscape 4 if (document.dom) { document.dom.display = harr; } document.thisID.className = hover; } else { // IE 4 if (document.all.dom) { document.all.dom.style.display = harr; } document.all.thisID.className = hover; } } } </script> </head> <body> <table id="kalenteri"> <?php $colspan = 8; $numero = 6; if ($show_weekend != 1) { $colspan = $colspan-2; } if ($show_week != 1) { $colspan = $colspan-1; $numero = $numero-1; } if ($show_month == 1) { if ($show_kuu == 1) { $kuu = 'kuu'; } ?> <tr> <td colspan="<?=$colspan?>" class="vuosi"><?php print $kuukausi[$month-1].$kuu." ".date('Y', $now); ?></td> </tr> <?php } if ($show_days == 1) { ?> <tr> <?php if ($show_week == 1) { ?> <td class="otsikko">Vk</td> <?php } ?> <td class="otsikko">Ma</td> <td class="otsikko">Ti</td> <td class="otsikko">Ke</td> <td class="otsikko">To</td> <td class="otsikko">Pe</td> <?php if ($show_weekend == 1) { ?> <td class="otsikko">La</td> <td class="otsikko">Su</td> <?php } ?> </tr> <?php } $paivat = 8; if ($show_week != 1) { $paivat = $paivat-1; $ekapaiva = $ekapaiva-1; } # Montako viikkoa tulostetaan for($a=0;$a<$viikkoja;$a++) { # Viikkojen numerointi if ($a >= 1) $viikko++; # Tulostetaan <tr> print "\t<tr>\n"; # Tulostetaan kyseisen viikon paivat for($b=0;$b<$paivat;$b++) { # Tyhjataan muuttujat $div = ''; $solu = ''; # Jos tulostettava paiva on tama paiva, $class arvo on 'nykyinen' if ($paiva == $pv) { $class = 'nykyinen'; } # Jos tulostettava paiva on taman paivan jalkeen, mutta kuitenkin tata kuuta, $class arvo on 'uusi' elseif ($paiva > $pv) { $class = 'uusi'; } # Muutoin $class arvo on 'kkvanha' (eli kuluvan kuukauden menneet paivat) else { $class = 'kkvanha'; } # Jos tulostettava paiva on Lauantai tai Sunnuntai, maaritetaan $class arvoksi 'vkl' if (($class == 'uusi') && ($b == 6 || $b == 7)) { $class = 'vkl'; } # Jos $b on 0, eli ei ole paiva, tulostetaan viikkonumero (paivat ovat $b -> 1-7) if ($b == 0 && $show_week == 1) { print "\t\t<td class='viikko'>".$viikko."</td>\n"; } # Jos tulostettava paiva on tata kuuta, tulostetaan se maaritetyilla arvoilla elseif ($date > $ekapaiva && $paiva <= $viimenenpaiva) { if (($b >= $numero) && ($show_weekend != 1)) { $paiva++; } else { # Tarkistetaan onko talla paivalla merkinta if ($merkki[$paiva] == TRUE) { $div = div($date, date("d.m", mktime(0,0,0,$month,$paiva,$year)).".".$year, $merkki[$paiva]); $class .= 'merkki'; } # Tulostetaan <td> ja paivamaara $solu .= "\t\t<td id='$date' onmouseover=\"hover('$date', 'over');\" onmouseout=\"hover('$date', '$class');\" class='$class'>".$paiva; # Tulostetaan $div muuttuja $solu .= $div; # Tulostetaan </td> ja nostetaan $paiva muuttujan arvoa $solu .= "</td>\n"; $paiva++; $edellinenpaiva = 1; } } # Jos tulostettava paiva ei ole tata kuuta, tulostetaan seuraava else { if (($b >= $numero) && ($show_weekend != 1)) { } else { $solu = "\t\t<td id='$date' onmouseover=\"hover('$date', 'over');\" onmouseout=\"hover('$date', 'vanha');\" class='vanha'>".$edellinenpaiva."</td>\n"; $edellinenpaiva++; } } # Kasvatetaan $date muuttujan arvoa $date++; print $solu; } print "\t</tr>\n"; } ?> </table> </body> </html>
MAIN.CSS
#kalenteri { font-family: arial, tahoma, helvetica; font-size: 12px; text-align: center; # border: 1px solid #666; # width: 240px; # height: 240px; } /*-----------------------------------------------------------------------------------------------*/ #kalenteri .vuosi { font-weight: bold; } #kalenteri .otsikko { font-weight: bold; width: 30px; } #kalenteri .viikko { height: 30px; } /*-----------------------------------------------------------------------------------------------*/ #kalenteri .uusi { background-color: #eee; } #kalenteri .nykyinen { font-weight: bold; background-color: #000; color: #fff; } #kalenteri .vkl { background-color: #eed2d2; } #kalenteri .vanha { color: #666; background-color: #ccc; } #kalenteri .kkvanha { color: #666; background-color: #ddd; } #kalenteri .hover { background-color: #ffcc00; color: #000; } /*-----------------------------------------------------------------------------------------------*/ .kelluva { position: absolute; z-order: 10; background-color: #eee; border: 1px solid #666; color: #444; padding: 0px 3px 3px 3px; text-align: left; } .kelluva p { text-align: left; border-bottom: 1px solid #888; color: #000; font-weight: bold; } /*-----------------------------------------------------------------------------------------------*/ #kalenteri .nykyinenmerkki { font-weight: bold; background-color: #687d68; color: #fff; border: 1px solid #555; } #kalenteri .vklmerkki { border: 1px solid #ccc; background-color: #eeeed2; } #kalenteri .uusimerkki { border: 1px solid #ccc; background-color: #d2eed2; } #kalenteri .vanhamerkki { border: 1px solid #000; color: #fff; background-color: #3a4e32; } #kalenteri .kkvanhamerkki { border: 1px solid #000; color: #fff; background-color: #578744; }
En jaksanut kommentoida CSS tiedostoa.
Otan kaiken rakentavan kritiikin mielelläni vastaan.
Joitakin/monia asioita olisi varmaan voinut tehdä helpomminkin, mutta tein tylsyyttäni tälläsen muutamassa tunnissa ja ajattelin laittaa sen jakoon, siinä uskossa että jollakin voisi olla tälle käyttöä?
<itsekehua>
Olenkos nyt sitten vähä näppärä?
=> http://atteweb.net/?p=kalenteri
</itsekehua>
Kuten toisellekin puolelle totesin, ulkoasu hieno, mutta jos aikoo jossain oikein käyttää, niin vaati parantelua
Aihe on jo aika vanha, joten et voi enää vastata siihen.