V tΘto off-line verzi nenφ kalendß° aktußlnφ.
Univerzßlnφ kalendß°
srpnen 2001 | Po |
┌t |
St |
╚t |
Pß |
So |
Ne |
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
|
|
Kalendß° zobrazujφcφ p°ehledn∞ aktußlnφ m∞sφc v tabulce, s mo₧nostφ v²b∞ru libovolnΘho m∞sφce i roku. VÜe podle Φesk²ch zvyklostφ tzn. - pond∞lφ je prvnφ den v t²dnu, ...
Struktura skriptu
// ******************************************************************************
// * Dynamicky generovan² kalendß° *
// * WWW http://chweb.host.sk *
// * E-mail jan.chmelik@atlas.cz *
// ******************************************************************************
//
// Na nßsledujφcφ mφsta je mo₧no vlo₧it Φßsti k≤du dßle uvedenΘ na tΘto strßnce
//
// ╚ßst 1 - definice polφ s Φesk²mi nßzvy m∞sφc∙ a dnφ
//
// ╚ßst 4 - Φtenφ zm∞n∞n²ch dat po odeslßnφ formulß°e
//
// ╚ßst 2 - dynamicky vygenerovan² formulß° pro v²b∞r m∞sφc∙ a rok∙
//
// ╚ßst 3 - v²poΦty a vykreslenφ tabulky - se sloupci PO a₧ Ne
|
|
Nejprve k Φßsti oznaΦenΘ ╚ßst 1. Vytvo°φme si dv∞ asociativnφ pole pro pozd∞jÜφ snadnΘ zφskßnφ Φesk²ch nßzv∙ m∞sφc∙ a dn∙ v t²dnu. Po tΘto definici asociativnφch polφ $no2month a $no2day by nap°φklad v²raz echo $no2month[5]; vypsal slovo kv∞ten.
<?
//╚┴ST 1 -------------------------------------------
//pole pro prevod cisla na nazev mesice
$no2month = Array ( 1 => "leden",
2 => "·nor",
3 => "b°ezen",
4 => "duben",
5 => "kv∞ten",
6 => "Φerven",
7 => "Φervenec",
8 => "srpnen",
9 => "zß°φ",
10 => "°φjen",
11 => "listopad",
12 => "prosinec"
);
//pole pro prevod cisla na nazev dne
$no2day = Array ( 1 => "Po",
2 => "┌t",
3 => "St",
4 => "╚t",
5 => "Pß",
6 => "So",
7 => "Ne"
);
//KONEC ╚┴STI 1 -------------------------------------
?>
|
|
DalÜφ Φßst skriptu tentokrßt oznaΦenß ╚ßst 2 vytvß°φ formulß°,
v n∞m₧ jsou obsa₧eny 3 hlavnφ objekty. Prvnφm je rozbalovacφ menu pro v²b∞r m∞sφce
(pou₧φvßme nßzvy m∞sφc∙ z d°φve nadefinovanΘho pole).
Druh²m prvkem formulß°e je podobnΘ menu pro v²b∞r roku
(ve skriptu je pou₧ito rozmezφ - akußlnφ rok + 3 roky zp∞t + 5 let do budoucnosti.
Tφm, ₧e rozmezφ let odvozujeme od dynamickΘ hodnoty udßvajφcφ aktußlnφ rok,
stßvß se tento kalendß° v₧dy aktußlnφm.
//╚┴ST 2 -------------------------------------------
//DynamickΘ generovßnφ formulß°e
<form action='kalendar.php' method='post' name='kalendar'>;
<?
//generovßnφ rozbalovacφho menu - m∞sφce
echo "<select name='mesic' size='1'?>\n";
for ($i=1; $i<=12; $i++)
{
echo "<option value='$i'";
if ($i == $mesic) echo " selected ";
echo "?>$no2month[$i]</option?>\n";
}
echo "</select?>\n";
//generovßnφ rozbalovacφho menu - rok
echo "<select name='rok' size='1'?>\n";
for ($i=Date("Y")-3; $i<=Date("Y")+5; $i++)
{
echo "<option value='$i'";
if ($i == $rok) echo " selected ";
echo "?>$i</option?>\n";
}
echo "</select?>\n";
?>
//tlacitko pro potvrzeni zm∞n
<input type='submit' name='submit' value='zm∞nit'>
</form>
//KONEC ╚┴STI 2 -------------------------------------
|
|
Nynφ zb²vß vytvo°it tabulku a vypsat jednotlivΘ dni.
// ╚┴ST 3 - vlastnφ tabulka ------------------------------------
<TABLE BORDER="1">
<TR>
<TD align="center" colspan="7">
<?
//kter²m dnem v t²dnu zaΦφnß m∞sφc (0-ne,1-po,2-·t,....6-so)
$firstday = Date("w",$firstdaytime );
//---------------------------------------------------------------
// prvnφ dv∞ °ßdky tabulky - nadpisy
//popis kalendß°e - m∞sφc a rok
echo $no2month [0+Date("m",$firstdaytime )]; //nazev mesice
echo " ".$rok; //rok
echo "</td></tr>";
echo "<tr>";
//°ßdka s popisem dnφ - Po ┌t St .....
for ($i=1; $i<=7; $i++) {
echo "<td align='center'>".$no2day[$i]."</td>\n";
}
echo "</tr><tr>";
//----------------------------------------------------------------
// v²pis jednotliv²ch dnφ do tabulky
//kolik ma vynechat prazdnych policek
$mezer = $firstday;
//pokud je prvni den v m∞sφci ned∞le hodφ to nulu
//ale u nßs je to 7. den v t²dnu
if ($firstday==0)
$mezer=7;
// udela prazna policka
for ($i=1; $i < $mezer ; $i++) {
echo "<td> </td>\n";
}
// projede cel² m∞sφc - vypφÜe dni 1 a₧ (28,29,30,31)
for ($i=1; $i<=40; $i++) {
$eachday = $firstdaytime + ($i-1)*86400;
//jeste jsme v tomto m∞sφci ?
//pokud ano vypise do policka datum
if ($i == Date("j",$firstdaytime+($i-1)*86400)) {
echo "<td align='center'>$i</td>\n";
}
else {
// pokud jsme u datumu, kter² pat°φ
// do dalÜφho m∞sφce -> konec
echo "<td> </td>\n";
if (Date("w",$eachday) == 0)
break; //pokud je uz na konci
//mesice i radky tak konci
}
//pokud jsme na nedeli tak zacneme dalsi radek
if (Date("w",$eachday) == 0)
echo "</tr><tr BGCOLOR='Wheat'>\n";
}
?>
</tr>
</table>
// ╚┴ST 3 - konec -------------------------------------------
|
|
Aby se promφtly zm∞ny zadanΘ ve formulß°i p°φmo do kalendß°e musφ skript p°ijφmat data
zaslanß tφmto formulß°em. K tomu slou₧φ nßsledujφcφ Φßst k≤du. Pokud nejsou zaslanß ₧ßdnß
data (nap°. vstoupφme poprvΘ), skript si doplnφ do prom∞nn²ch aktußlnφ Φas. Tφm dostaneme
kalendß° na aktußlnφ m∞sφc, nebo pokud jsou z formulß°e zaslanß n∞jakß data, pak v²poΦet
kalendß°e provedeme s t∞mito hodnotami.
<?
//╚┴ST 4 -------------------------------------------
if (!IsSet($mesic)) {
$mesic=0+Date("m");
$rok=Date("Y");
$month_you_want=Time();
}
else {
$month_you_want=0+Date("U", MkTime(0,0,0,$mesic,Date("j"),$rok));
//v sekundach po 1970
}
//KONEC ╚┴STI 4 -------------------------------------
?>
|
|
|