Zdravim, dovolil som si zabrat viac miesta, aby som vam ukazal moj kod kalendara v php. Povodne som cital navod na
http://www.linuxsoft.cz/article.php?id_article=206 ale tam autor pouzil algoritmus ktory som nepochopil na 100%. Autor zistuje ci je rok prechodny, ci patry prechodovi tyzden medzi rokmi do tohto roku alebo minuleho, vypisuje tabulku po riadkoch pricom kalendar je stavany po stlpcoch a ine sialenosti. Tak som skusil spravit vlastny algoritmus, ku ktoremu mam par otazok. Funguje pomocou dvojrozmerneho pola ktore sa zadava po stlpcoch a vypisuje po riadkoch (aby bolo mozne vyplnit tabulku). Tu je:
Kód:
<?php
$mesiac=date("m");$rok=date("Y"); //zistenie mesiaca a roka
$prvyDen=date("w",mktime(0,0,0,$mesiac,1,$rok)); //ktorym dnom zacina mesiac, marec 2009 zacina nedelov cize 7. dnom
if ($prvyDen==0) $prvyDen=7; //nedela je 0. den, cize podmienka zabezpeci aby bol 7.
$pocetDni=date("t",mktime(0,0,0,$mesiac,1,$rok)); //pocet dni v mesiaci
$pocetStlpcov=ceil(($pocetDni+$prvyDen-1)/7); //kolko stlpcov bude kalendar potrebovat, bud 4,5 alebo 6
$cislo=0; //pomocou inkremetacie tohto cisla sa vyplna pole kalendara
$pole[$pocetStlpcov-1][7-1]; //pole kalendara
$month=Array(1=>"Januar","Februar","Marec","April","Maj","Jun","Jul","August","September","Oktober","December");
for ($st=0; $st<$pocetStlpcov; $st++) //cyklus pre vyplnenie formulara
for ($ri=0; $ri<7; $ri++) /*dni prveho tyzdna v kalendary ktore patria do minuleho mesiaca,takisto aj dni
posledneho tyzdna patriace do dalsieho mesiaca sa vyplnia nulov */
if ((($ri<$prvyDen-1)&&($st==0)) ||($cislo>=$pocetDni)) {$pole[$st][$ri]=0;}
else {$cislo++; $pole[$st][$ri]=$cislo;} //vyplnenie pola inkrementujucou prem. $cislo (od 1 do $pocetDni)
//hlavicka kalendara
echo "<TABLE border=\"1\" style=\"border-collapse:collapse\"><th height=\"30\" bgcolor=\"lightgray\" colspan=\"8\">".$month[(int)$mesiac]." ".date("Y")."</th> ";
//cyklus pre vypisanie tabulky, pole sa vypisuje opacne (po riadkoch, naplnane bolo po stlpcoch)
for ($ri=0;$ri<7; $ri++){ echo "<tr><td bgcolor=\"lightblue\">"; //riadky, farba prveho stlpca s dnami
//vyplnenie prveho stlpca tabulky nazvami dnov podla toho na ktorom riadku cyklus je
if ($ri==0) echo "Pondelok";if ($ri==1) echo "Utorok";if ($ri==2) echo "Streda";
if ($ri==3) echo "Stvrtok";if ($ri==4) echo "Piatok";if ($ri==5) echo "Sobota";
if ($ri==6) echo "Nedela";echo "</td>";
for ($st=0; $st<$pocetStlpcov; $st++) { //vypise jednotlive bunky riadku
echo "<td ";
if ($pole[$st][$ri]==date("d")) echo "bgcolor=\"lightgray\" "; //farba bunky s aktualnym datumom
echo "style=\"text-align:center;width:22;height:25;\">"; //format buniek
if ($pole[$st][$ri]==0) echo " "; //vypise medzeru ak ma pole hodnotu 0
else echo $pole[$st][$ri]; //inak vypise hodnotu pola (cislo dna - prem $cislo)
echo"</td>"; }
echo "</tr>"; }
echo "</table>" ?>
Co si myslite ktory sposob je lepsi (hlavne rychlejsi pre server), moj alebo na tej stranke?
Je rychlejsi sposob zadat slovenske nazvy mesiacov do pola (pole $month) alebo vypisovat nazvy pomocou podmienky ako if ($ri==0) echo "Pondelok";if ($ri==1) echo "Utorok" ?
V hlavicke kalendara (tam kde sa vypisuje rok a mesiac) mam nastavenu farbu pozadia na sivu, Opera to zobrazuje dobre, pricom IE tam dava stale beznadejne modru. Cim to je?
Mne to trvalo dost dlho, 5 - 6 hodin s tym ze php som sa zacal ucit den pred tym. Len tak pre zaujimavost za kolko by ste to stihli vy?
Dakujem za vsetky nazory a odpovede