Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Mateusz Bogolubow, ostatnia modyfikacja: 2007-02-23
Tym razem przedstawię sposób dynamicznego generowania kalendarza. Skrypt generuje jedynie aktualny miesiąc, ale uważam że jeśli dokładnie prześledzisz mój tekst to nie będziesz miał problemów z modyfikacją i ulepszeniem skryptu.
Na początek wersja statyczna, aby ustalić wygląd kalendarza:
<html> <head> <title>Kalendarz</title> <meta http-equiv="content-type" content="text/xml; charset=iso-8859-2" /> <meta http-equiv="content-language" content="pl" /> <style type="text/css"> #kalendarz {width: 250px;} #kalendarz p {text-align: right;} #kalendarz li {display: inline; padding:2px 5px; } #kalendarz .akt {color: #990000; font-weight: bold;} #kalendarz .hidden {visibility: hidden;} </style> </head> <body> <div id="kalendarz"> <p>Poniedziałek, 04 maja 2006</p> <ul> <li>N </li> <li>Pn</li> <li>Wt</li> <li>Śr</li> <li>Cz</li> <li>Pt</li> <li>Sb</li> </ul> <ul> <li class="hidden">00</li> <li>01</li> <li>02</li> <li>03</li> <li class="akt">04</li> <li>05</li> <li>06</li> <li>07</li> <li>08</li> <li>09</li> <li>10</li> <li>11</li> <li>12</li> <li>13</li> <li>14</li> </ul> <div> </body> </html>
Przyjmuję, że kod jest dla Ciebie jasny i nie będę go tłumaczył...
Na początku stworzyłem 4 funkcje na potrzeby kalendarza:
function dni_mies($mies,$rok) { $dni = 31; while (!checkdate($mies, $dni, $rok)) $dni--; return $dni; } echo dni_mies(1,2006);
Funkcja dni_mies() sprawdza ile dni ma dany miesiąc i zwraca ich ilość. Pod funkcją znajduje się przykład jej wykorzystania.
function dzien_tyg_nr($mies,$rok) { $dzien = date("w", mktime(0,0,0,$mies,1,$rok)); return $dzien; } echo dzien_tyg_nr(8,2006);
Funkcja dzien_tyg_nr() sprawdza jakim dniem tygodnia jest pierwszy dzień miesiąca. Zwracane wartości to cyfry gdzie 0 to niedziela, a 6 to sobota.
function dzien_tyg($nr) { $dzien = array(0 => "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"); return $dzien[$nr]; } echo dzien_tyg(dzien_tyg_nr(8,2006));
Funcka dzien_tyg() zamienia cyfrę przyporządkowaną danemu dniu tygodnia na odpowiednią nazwę.
function miesiac_pl($mies) { $mies_pl = array(1=>"Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwieca", "Lipieca", "Sierpnia", "Września", "Października", "Listopada", "Grudnia"); return $mies_pl[$mies]; } echo miesiac_pl(12);
Funkcja miesiac_pl() zamienia cyfrę przyporządkowaną danemu miesiącu na odpowiednią nazwę.
Korzystając teraz z funkcji date() oraz zdefiniowanych przeze mnie funkcji wyświetlamy aktualną datę pomiędzy znacznikiem <p>.
echo '<p>'.dzien_tyg(date("w")).', '.date("d").' '.miesiac_pl(date("n")).' '.date("Y").'</p>';
Funkcja date(), pobiera aktualna datę i zwraca ją w zdefiniowany przez nas sposób. Więcej na jej temat znajdziesz w manualu.
Przyszedł czas na wyświetlenie dni miesiąca. Pierwszy problem jaki napotkaliśmy to rozpoczęcie odliczania dni od odpowiedniego dnia tygodnia. Tutaj przychodzi nam z pomocą funkcja dzien_tyg_nr(), która zwraca cyfrę reprezentującą odpowiedni dzień tygodnia. Jeśli przyjrzymy się jej bliżej to jest to ilość pustych pól, które mamy wyświetlić. Korzystając z tej informacji tworzymy odpowiedni kod:
for($i=0;$i<dzien_tyg_nr(date("n"),date("Y"));$i++) echo '<li class="hidden">00</li> ';
Dzięki klasie "hidden", nasze pole nie jest wyświetlane w przeglądarce.
Teraz już spokojnie możemy wyświetlić nasze dni miesiąca
for($i=1;$i<dni_mies(date("n"),date("Y")) +1;$i++) { if ($i<10) $i = '0'.$i; if ($i == date("d")) echo '<li class="akt">'.$i.'</li> '; else echo '<li>'.$i.'</li> '; }
Zapewne zastanawiasz się po co dodaje zero do zmiennej $i gdy jest ona mniejsza od 0. Jest to bardziej kosmetyczna zmiana, która pozwala na utrzymanie odpowiedniego układu rozmieszczenia cyfr kalendarza. Następny warunek przypisuje aktualnej dacie klasę "akt", która odpowiednio formatuje tekst.
Całość skryptu prezentuje się tak:
<?php function dni_mies($mies,$rok) { $dni = 31; while (!checkdate($mies, $dni, $rok)) $dni--; return $dni; } function dzien_tyg_nr($mies,$rok) { $dzien = date("w", mktime(0,0,0,$mies,1,$rok)); return $dzien; } function dzien_tyg($nr) { $dzien = array(0 => "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Pi±tek", "Sobota"); return $dzien[$nr]; } function miesiac_pl($mies) { $mies_pl = array(1=>"Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwieca", "Lipieca", "Sierpnia", "Wrze¶nia", "PaĽdziernika", "Listopada", "Grudnia"); return $mies_pl[$mies]; } ?> <html> <head> <title>Kalendarz</title> <meta http-equiv="content-type" content="text/xml; charset=iso-8859-2" /> <meta http-equiv="content-language" content="pl" /> <style type="text/css"> #kalendarz {width: 250px;} #kalendarz p {text-align: right;} #kalendarz li {display: inline; padding:2px 5px; } #kalendarz .akt {color: #990000; font-weight: bold;} #kalendarz .hidden {visibility: hidden;} </style> </head> <body> <div id="kalendarz"> <?php echo '<p>'.dzien_tyg(date("w")).', '.date("d").' '.miesiac_pl(date("n")).' '.date("Y").'</p>'; ?> <ul> <li>N </li> <li>Pn</li> <li>Wt</li> <li>Śr</li> <li>Cz</li> <li>Pt</li> <li>Sb</li> </ul> <ul> <?php for($i=0;$i<dzien_tyg_nr(date("n"),date("Y"));$i++) echo '<li class="hidden">00</li> '; for($i=1;$i<dni_mies(date("n"),date("Y")) +1;$i++) { if ($i<10) $i = '0'.$i; if ($i == date("d")) echo '<li class="akt">'.$i.'</li> '; else echo '<li>'.$i.'</li> '; } ?> </ul> <div> </body> </html>
Mateusz Bogolubow
Osoby czytające tę publikację przeglądały również:
© 2004-2008 copyright by webmade.org