Publikováno v sekci PHP v
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;</p> 7: <p>// prvotni inicializace, nastavime aktualni cas, mesic a rok 8: $date = time(); 9: $day = date('d', $date); 10: $month = date('m', $date); 11: $year = date('Y', $date);</p> 12: <p>// pokud v GETu existuje mesic ci rok, tak "aktualni" mesic a rok je ten z URL 13: if ($_GET["year"]) $year = (int) $_GET["year"]; 14: if ($_GET["month"]) $month = (int) $_GET["month"];</p> 15: <p>// pro dalsi zobrazeni potrebujeme prvni den v mesici, pocet dni v mesici ... 16: $first_day = mktime(0,0,0,$month, 1, $year); 17: $title = date('n', $first_day); 18: $day_of_week = date('D', $first_day); 19: $days_in_month = date('t', $first_day);</p> 20: <p>// ceske mesice 21: $cz_months = array( 22: 1 =?> 23: "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 = "<a href="?month=".($prevM)."&year=".($prevY)."">"; $next = "</a> <a href="?month=".($nextM)."&year=".($nextY)."">>></a>"; // 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 "</p> 24: <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]