Autor | Zpráva | ||
---|---|---|---|
lionel messi Profil |
#1 · Zasláno: 8. 10. 2013, 18:39:38
Zdravím,
mám v PHP vytvorený kalendár podľa tutoriálu na Linuxsoft.cz a všetko funguje bez problémov. Teraz by som však chcel, aby bol jeden deň zvýraznený (prípadne aj viac dní v mesiaci, ale nezávisle od seba). Môj pokus bol takmer úspešný, malo to len jeden háčik. Inkriminovaný deň mi vypísalo 2x - raz normálne a raz zvýraznený. Skúšal som si do premennej uložiť číslo dňa a napísať podmienku, ale nepodarilo sa mi nič iné docieliť (iba ak rozbitie kalendára a ešte k tomu bez zvýraznenia až na ten jeden zmienený pokus). Ďakujem veľmi pekne za radu. |
||
okolojsoucí Profil * |
#2 · Zasláno: 8. 10. 2013, 18:52:20
Prosím vložte zdrojový kód.
|
||
lionel messi Profil |
<?php function JePrechodnyRok ($rok) { return (boolean) date("L", mktime(0,0,0,1,1,$rok)); } function PocetDnu ($mesic, $rok) { return cal_days_in_month(CAL_GREGORIAN, $mesic, $rok); } function PrvniDen ($mesic, $rok) { $anglickeporadi = date("w", mktime(0, 0, 0, $mesic, 1, $rok)); return ($anglickeporadi==0) ? 7 : $anglickeporadi; } $sloupcu = date("W", mktime(0, 0, 0, $mesic, $PocetDnu-7, $rok)) - date("W", mktime(0, 0, 0, $mesic, 1+7, $rok))+4; function Bunka ($radek, $sloupec, $PrvniDen, $PocetDnu) { $dny=Array(1=>"Po", "Út", "St", "Čt", "Pá", "So", "Ne"); if ($sloupec==1) return $dny[$radek]; $chcivratit = ($sloupec-2)*7 + $radek - $PrvniDen+1; if ($chcivratit<1 || $chcivratit>$PocetDnu) return " "; else return $chcivratit; } function Kalendar ($mesic, $rok) { $mesice=Array(1=>"leden", "únor", "březen", "duben", "květen", "červen", "červenec", "srpen", "září", "říjen", "listopad", "prosinec"); //kontroly if (!is_numeric($mesic)) return "Měsíc musí být číslo!"; if (!is_numeric($rok)) return "Rok musí být číslo!"; if ($mesic<1 || $mesic>12) return "Měsíc musí být číslo od 1 do 12"; if ($rok<1980 || $rok>2050) return "Rok musí být číslo od 1980 do 2050"; // zjištění počtu sloupců $PocetDnu = PocetDnu ($mesic, $rok); $PrvniDen = PrvniDen($mesic,$rok); $sloupcu = date("W", mktime(0, 0, 0, $mesic, $PocetDnu-7, $rok)) - date("W", mktime(0, 0, 0, $mesic, 1+7, $rok))+4; // vlastní kód echo "<TABLE border=\"1\" style=\"border-collapse: collapse\" width=\"",$sloupcu*30,"\">"; echo "<TR><TD colspan=$sloupcu width=\"",$sloupcu*30,"\" align=\"center\">".$mesice[$mesic]." ".$rok."</TD></TR>\n"; for ($radek=1;$radek<=7;$radek++) { echo "<TR align=\"center\">"; for ($sloupec=1; $sloupec<=$sloupcu; $sloupec++) echo "<TD width=\"30\">".Bunka($radek, $sloupec, $PrvniDen, $PocetDnu)."</TD>"; echo "</TR>\n"; } echo "</TABLE>"; } Kalendar (); ?> |
||
Tori Profil |
#4 · Zasláno: 9. 10. 2013, 07:41:39
Řádek 15 je tam asi navíc.
A jak jste to upravoval, aby se zvýraznily některé buňky? |
||
lionel messi Profil |
#5 · Zasláno: 9. 10. 2013, 11:48:10 · Upravil/a: lionel messi
Tori:
„A jak jste to upravoval, aby se zvýraznily některé buňky?“ Zhruba takto (presný postup si nepamätám a kód je teraz v pôvodnej verzii [#3]): Na začiatku funkcie Kalendar som definoval: $zvyrazni = 15; echo "<TD width=\"30\"". if (Bunka(($radek, $sloupec, $PrvniDen, $PocetDnu) == $zvyrazni) echo " style='font-weight:bod'"; .">".Bunka($radek, $sloupec, $PrvniDen, $PocetDnu)."</TD>"; echo "</TR>\n"; a toto ku každej bunke pridalo style=...
Ten takmer úspešný pokus, kde inkriminovaný dátum vypísalo 1x obyčajne a 1x so zvýraznením som urobil podobne, ale: r. 40: echo "<TD width=\"30\">".Bunka($radek, $sloupec, $PrvniDen, $PocetDnu)."</TD>"; if (Bunka($radek, $sloupec, $PrvniDen, $PocetDnu) == $zvyrazni) echo "<TD width=\"30\" style='font-weight:bold'>$zvyrazni</TD>"; Ešte ma včera napadlo trochu iné riešenie: dať čísla dní do poľa pomocou range (1,31) - samozrejme predtým si podmienkou overiť, koľko dní má mesiac a vypisovať ich cez foreach , podmienkou if-else určiť čo má byť zvýraznené. Toto ale začne tabuľku vždy od ľavého horného rohu číslom 1 a to je problém - napr. 1. októbra 2013 bol utorok (Ale zase zvýrazňovalo perfektne).
|
||
Chatík Profil |
#6 · Zasláno: 9. 10. 2013, 12:04:51
Ukázka: http://erasttest.comehere.cz/kalendar.php
Třeba ti pomůže tento script: <?php $den_dnes = date("j"); $mesiac_dnes = date("n"); $rok_dnes = date("Y"); // prevzatie udajov z POST $mesiac = $mesiac_dnes; if (!empty($_POST["mesiac"])) $mesiac = abs(intval($_POST["mesiac"])); if ($mesiac < 1 || $mesiac > 12) $mesiac = $mesiac_dnes; $rok = $rok_dnes; if (!empty($_POST["rok"])) $rok = abs(intval($_POST["rok"])); if ($rok < 2013 || $rok > 2020) $rok = $rok_dnes; ?> <form action="./kalendar.php" method="post"> <label>Měsíc: <select name="mesiac" onchange="this.form.submit();"> <?php for ($i = 1; $i < 13; $i++) { echo " <option value=\"".$i."\""; if ($mesiac == $i) echo " selected=\"selected\""; echo ">".$i."</option>"."\r\n"; } ?> </select> </label> <label>rok: <select name="rok" onchange="this.form.submit();"> <?php for ($i = 2013; $i < 2020; $i++) { echo " <option value=\"".$i."\""; if ($rok == $i) echo " selected=\"selected\""; echo ">".$i."</option>"."\r\n"; } ?> </select> </label> </form> <style> .kalendar {float: left; width: 10%; margin-top: 15px; line-height: 25px; border-collapse: collapse; text-align: center;} </style> <?php $datum = mktime(0, 0, 0, $mesiac, 1, $rok); // timestamp pre aktualne nastaveny datum $prvy_den = date("N", $datum) - 1; // v ktorom dni zacina prvy den v mesiaci 0-6 $pocet_dni = date("t", $datum); // pocet dni v danom mesiaci $mesiace=Array(1=>"Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); ?> <table class="kalendar" width="237" border="1"> <th colspan="7"> <?php echo $mesiace["$mesiac"];?> </th> <tr> <td> Po </td> <td> Út </td> <td> St </td> <td> Čt </td> <td> Pá </td> <td> So </td> <td> Ne </td> </tr> <?php $a = 1; for ($i = 0; $i < $pocet_dni + $prvy_den; $i++) { if ($a == 1) echo " <tr>\n"; if ($i < $prvy_den) { echo " <td> </td>\n"; // pociatocne prazdne bunky v tabulke } else { $b = $i - $prvy_den + 1; if ($b == $den_dnes && $mesiac_dnes == $mesiac) { echo " <td style='background-color:blue'> ".$b." </td>\n"; // zvyraznenie dna dnesneho datumu } else { echo " <td> ".$b." </td>\n"; } } // ukoncenie riadka tabulky if ($a == 7 ) echo " </tr>"."\r\n"; $a++; if ($a > 7) $a = 1; } if ($a != 1) { echo str_repeat('<td> </td>', 7 - $a) . '</tr>'; } ?> </table> |
||
lionel messi Profil |
Chatík:
Určite vyskúšam, len ten link s príkladom mi vypísal takýto rozsypaný čaj: eklamu na tomto hostingu zajiĹĄĹĽuje Business Factory - internetovĂĄ reklama a pokroÄilĂ˝ internetovĂ˝ marketing .
Prepáč, už to ide, kalendár som pozrel, ale kódovanie je stále rovnako rozbité :) . |
||
Chatík Profil |
#8 · Zasláno: 9. 10. 2013, 12:11:41
To už je věc kodování :-)
|
||
lionel messi Profil |
#9 · Zasláno: 9. 10. 2013, 14:50:51
Chatík:
Ďakujem za pomoc, riešenie [#6] je vynikajúce a flexibilné. |
||
Časová prodleva: 11 let
|
0