Jak vytvořit PHP kalendář?

/ Blog / PHP / Jak vytvořit PHP kalendář?

Publikováno v sekci PHP v 12. 1. 2008 - 12:01

Potřebujete PHP kalendář? Hledal jsem na internetu a nacházel jsem příliš robustní třídy či velmi ošklivé kódy, které začátečník nemůže chápat. Napsal jsem vlastní kalendář, jehož kód je velmi krátký a myslím, že nikomu nebude dělat problémy.

 1: <?php // odkazy na konkretni dny
 2: $selected_days[2009][2][24] = true;
 3: $selected_days[2009][2][27] = true;
 4: $selected_days[2009][3][5]  = true;
 5: $selected_days[2009][3][17] = true;
 6: $selected_days[2009][4][20] = true;
 7: 
 8: // prvotni inicializace, nastavime aktualni cas,  mesic a rok
 9: $date = time();
10: $day = date('d', $date);
11: $month = date('m', $date);
12: $year = date('Y', $date);
13: 
14: 
15: // pokud v GETu existuje mesic ci rok, tak "aktualni" mesic a rok je ten z URL
16: if ($_GET["year"]) $year = (int) $_GET["year"];
17: if ($_GET["month"]) $month = (int) $_GET["month"];
18: 
19: // pro dalsi zobrazeni potrebujeme prvni den v mesici, pocet dni v mesici ...
20: $first_day = mktime(0,0,0,$month, 1, $year);
21: $title = date('n', $first_day);
22: $day_of_week = date('D', $first_day);
23: $days_in_month = date('t', $first_day);
24: 
25: 
26: // ceske mesice
27: $cz_months = array( 
28:                     1 =?>
29:  "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec" ); $prevY = $nextY = $year; $prevM = $nextM = $month; // nastaveni odkazu pro predchozi a nasledujici mesic / rok if ($month - 1 12){ $nextM = 1; $nextY++;} else {$nextM = $month + 1;}; $prev = "["; $next = "](?month=".($prevM)."&year=".($prevY).") [>>](?month=".($nextM)."&year=".($nextY).")"; // timto si vyplnime v kalendari prazdne bunky, 1 den v mesici a prvniho neni vzdy pondeli ... $emptyTD = array("Mon" => 0, "Tue" => 1, "Wed" => 2, "Thu" => 3, "Fri" => 4, "Sat" => 5, "Sun" => 6); $blank = $emptyTD[$day_of_week]; // vykresleni kalendare echo "
30: 
31: <table align="center" border="1" id="calendar">"; echo "<tr><th>$prev</th><th colspan="5"> ".$cz_months[$title]." $year</th><th>$next</th></tr>"; echo "<tr><td width="42">M</td><td width="42">T</td><td width="42">W</td><td width="42">T</td><td width="42">F</td><td width="42">S</td><td width="42">S</td></tr>"; $day_count = 1; echo "<tr>"; // zde prave zjistime pocet prazdnych bunek pred 1 dnem v mesici while ( $blank > 0 ) { echo "<td></td>"; $blank--; $day_count++; } $day_num = 1; // veskere dny v kalendari while ($day_num **[$day_num](?year=$year&month=$month&day=$day_num)**"; } else { echo "<td class="days">[$day_num](?year=$year&month=$month&day=$day_num)</td>"; } } else { echo "<td class="days">$day_num</td>"; } $day_num++; $day_count++; if ($day_count > 7) { echo "</tr><tr>"; $day_count = 1; } } // timto zajistime spravne zobrazeni kalendare a dopocitani prazdnych bunek while ($day_count >1 && $day_count "; $day_count++; } echo "</tr></table>"; ?>

[link]kalendar.zip[/link]

Kategorie

  • Osobní názory - 1x
  • PHP - 9x
  • MYSQL - 4x
  • CSS - 6x
  • jQuery - 3x
  • Sociální síť - 1x
  • Nette - 5x
  • Tipy & triky - 3x
  • Twitter Bootstrap - 1x
  • Týdenní tipy a novinky - 4x
  • SCSS - 1x
  • GIT - 1x
  • Gulp - 1x

  • Komentáře (36x)

    No já tedy nevím, ale mě se zdá, ukazuje nějak divně né? A jak se nastavuje startday - jsme v čechách... :-(
    #2 reagovat Roman Janko:
    [1] Pavel Kraus Co se ti ukazuje divne? Jinak zahlavi dnu , na to staci jednoduche pole ne?
    Velice dobrý a funkční příklad - mám ještě dotaz, jak by se to dalo udělat, že bych si u vybraných dní mohl změnit jednoduše barvu pozadí k danému dni a např. udělat i z čísla odkaz. _ poradíš? Díky
    #4 reagovat Roman Janko:
    [3] Ross
    Velmi jednodusse, vecer priklad rozsirim
    Pěkné, a co kdyby měsíce byly česky? Tu část s odkazy na jednotlivé dny bych taky potřeboval :P

    Díky
    #6 reagovat Roman Janko:
    Kód upraven (pouze v prikladu, ne v souboru kalendar.zip )
    #7 reagovat Jane:
    Ahoj, tak se si tento kalendář stáhla, ale nezobrazí se mi.. Nevim, v čem je chyba... Poradíte pls?? Dělám to v programu Evrsoft First Page 3.0
    #8 reagovat Roman Janko:
    [7] Jane Tady je asi kazda rada zbytecna ... Je nutne si uvedomit ze to je dynamicky kod, bez podpory PHP a APACHE to nespustite. Prectete si o tom neco na http://linuxsoft.cz/php
    #9 reagovat Aleš:
    Ahoj, není mě jasný význam proměnných $selected_days, může mi to někdo vysvětlit? Díky
    #10 reagovat Aleš:
    [9] Aleš tak už nic :-)
    #11 reagovat j.ree:
    je to sice pekny skript, ale docela mi tam vadi, ze nemas osetreny fakt, ze aktualni datum se zvyraznuje jak v budoucich tak i v minulych mesicich. Cize, dneska je 27.4., zvyrazneno budu mit i 27.5, 27.3 apod ... :)
    #12 reagovat Roman Janko:
    [11] j.ree To se da lehce opravit :]
    #13 reagovat j.ree:
    [12] Roman Janko Vsak jsem si to taky opravil, stacila jedna podminka navic :)
    Ahoj,mám takovej blbej dotaz..trochu se tu orientuju v tom kódě, ale některý věci mi pořád nejsou tak úplně jasný. Nemáš k tomu přesnější popisek? Trochu v tom plavu a newim co je co :D jinak obdivuju samozrejme ;)dyžtak mi písni na maila=)
    Děkuju na stotisíckrát, po pár úpravách se jedná o velmi povedený kalendář
    [15] er No dík :)
    Ddal bych tam isset($_GET["year"]) a pod tim isset($_GET["mounth"]) ... když nebudou existovat, PHP by hodilo error.
    [17] Drahomír Hanák Ano, ale je to pouze notice, na produkčním vyplé povětšinou. Navíc tento skript je staršího data a rozhodně není ideální a to ani nikde netvrdím. Je to pouze jakýsi nástin, jako ostatně všechno, nikoliv pro rozené "pastery" ctr+c -> ctr+v
    #19 reagovat David Tomek:
    poradí někdo jak zvýraznit aktuální den??? nwm jak na to
    Kdyžtak mi pošlete ten script.

    Děkuji předem
    #20 reagovat Vasek:
    Čau. Koukal jsem na vygenerovaný kod a na konci to vzdy generuje navic . Coz neni validni ale jinak je to ok :)
    #21 reagovat Vasek:
    jedno otevřený a uzavreny trko
    #22 reagovat ¨RJ:
    [21] Vasek Oprav a uverejnim nebo si casem udelam cas :)

    Validita není nic
    #23 reagovat Vašek:
    Tak už jsem na to přišel. Chceš to poslat na mail? Sem totiž nejdou vkladat některý znaky.
    Nejde mi TO stiahnuť...
    NO, skutočne to nejde stiahnuť. A skopírovaný kód z príkladu nie je ošetrený napr. tým, že každý mesiac označuje aktuálny deň...
    Not Found!
    I přesto se s tím dají dělat blbiny a funkční, stačí si lehce pohrát:
    http://www.zbelitovsko.cz/zbemeteo.php
    Romane díky za inspiraci, ještě to šlechtím...
    ahojte neviem či je to tu zive este avsak chcel by som sa opytat na moznost zvyraznenia dna ktory je a nasledne zvyraznenia stlpca vikendu.
    Zdravím, pouzil jsem Vas kalendar, ale nezobrazuje se mi tam aktualni datum, vyresil to uz nekdo nejak? Kdyztak poslete reseni na mail prosim, dekuju :-)
    #30 reagovat Tom:
    [27] Tom Vzhledem k tomu, že na tenhle odkaz čučí docela dost lidí, ještě jsem to vylepšil. Případné dotazy pište na kontakt na stránkách.
    [27] Tom Ještě jedno vylepšení - kalendář akcí - může se někomu hodit - najdete na hlavní stránce www.zbelitovsko.cz
    Případným zájemcům můžu poslat kód, grafiku i "databázi" svátků ;-)
    Ahoj Tom, vyzerá to dobre. Mohol by si mi to prosim poslat na strakaster@gmail.com ?
    Ahoj Tome, taktéž bych požádal o zaslání Tvého vyladěného kódu na radekstastny[zavinac]centrum.cz ;-)
    Děkuji!
    Ahoj Tome, taky čučím na Tvé stránky a líbí se. Mohl bych taktéž poprosit o kód na kalendář? Díky
    Zdravim, chcel by som sa spýtať ako by som zmenil ručne dosadzovanie dátumov na automaticke dosadzovanie datumov s databáze.

    Velmy by mi to pomohlo. Dík.
    #36 reagovat RomanJanko:
    [35] GetroXer Ahoj, jednodušše. Uložíš si pole v tom formátu v jakém jej to vyžaduje tj.

    while(...){
    $data[$rok][$mesic][$den] = TRUE;
    }




    Vložit nový komentář


    • na jiné komentáře odkazujte pomocí odkazu reagovat
    • vaše IP adresa bude zaznamenána
    • používají se gravatary
    • můžeme si tykat
    • HTML tagy vypnuty. PHP kód se také neprovede. Pokud potřebuju přiložit ukázku vašeho kódu, použijete službu pastebin
    • vulgární, rasistické či jinak nepřípustné komentáře budou smazány