Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP Kalenteri muistiinpanoilla

Kirbo [11.03.2008 17:21:33]

#

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;
                }

Kirbo [11.03.2008 17:21:34]

#

En jaksanut kommentoida CSS tiedostoa.

Kirbo [11.03.2008 17:41:12]

#

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öä?

ApE!0 [17.03.2008 01:06:53]

#

<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

Vastaus

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

Tietoa sivustosta