Autor | Zpráva | ||
---|---|---|---|
Pauli Profil * |
#1 · Zasláno: 4. 1. 2009, 01:22:27
Zdravím,
mám takový menší problém, potřeboval bych prosím poupravit tento script kalendáře, aby chodil pod php verzí 5 (pod verzí 4 chodí!). Tak kdyby se našel někdo tak hodný, já totiž objektovému php moc nerozumím a to nemluvím o tom, že v php 5 oproti 4 se prý trochu změnila syntaxe. Předem díky za pomoc! <?php define (YEAR_MIN, 1980); define (YEAR_MAX, 2020); define (YEAR_EXTENT, 3); // hodnoty z formuláře, převedeme na time formát if (isset($month) && isset($year)) $time = mktime (0, 0, 0, $month, 1, $year); // kontrola začátku a konce roku if ($time < mktime (0, 0, 0, 1, 1, YEAR_MIN) || $time > mktime (0, 0, 0, 12, 31, YEAR_MAX)) $time = time (); ?> <html> <head> <title>Kalendář</title> <style type="text/css"> body { font-family: "ARIAL CE", "HELVETICA CE","ARIAL","HELVETICA"; font-size: 12px; } .cell { width: 22px; height: 22px; font-family: "ARIAL CE", "HELVETICA CE","ARIAL","HELVETICA"; font-size: 12px; font-size: #000000; } </style> </head> <body> <?php class Ccolor { var $wday_txt = "#bbbbdd"; var $wend_txt = "#ddbbbb"; var $wday = "#ccccee"; var $wend = "#eecccc"; var $wday_noact = "#9090a6"; var $wend_noact = "#a69090"; var $today = "#ffffc0"; } // objekt $color = new Ccolor (); class Cdate { var $day; var $month; var $year; function Cdate ($time) { $this->day = date ("j", $time); $this->month = date ("n", $time); $this->year = date ("Y", $time); } } // objekt $date = isset ( $time ) ? new Cdate ( $time ) : new Cdate ( time () ); // názvy měsíců v roce $m = array (1 => "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); // názvy dní týdne $d = array ("Po", "Ut", "St", "Št", "Pi", "So", "Ne"); // formulář pro výběr měsíce a roku echo "<form action='index.php'>"; echo "<select name='month'>"; for ($i=1 ; $i<=count($m) ; $i++) echo ($i == $date->month) ? "<option value='$i' selected>$m[$i]" : "<option value='$i'>$m[$i]"; echo "</select>"; echo "<select name='year'>"; $i = ($date->year-YEAR_EXTENT < YEAR_MIN) ? YEAR_MIN : $date->year-YEAR_EXTENT; for ( ; $i<=$date->year+YEAR_EXTENT && $i<=YEAR_MAX; $i++) echo ($i == $date->year) ? "<option value='$i' selected>$i" : "<option value='$i'>$i"; echo "</select>"; echo "<input type='submit' value='Ok'>"; echo "</form>"; // predcházející a následující měsíc $time = mktime (0, 0, 0, $date->month - 1, $date->day, $date->year); echo "<a href='index.php?time=$time'><<</a>"; echo "<b> [ ".$m[$date->month]." $date->year ] </b>"; $time = mktime (0, 0, 0, $date->month + 1, $date->day, $date->year); echo "<a href='index.php?time=$time'>>></a>"; // výpis dní v týdnu echo "<table border='0' cellspacing='1' cellpadding='0'>"; echo "<tr align='center' valign='middle'>"; for ($i=0 ; $i<count($d) ; $i++) { $bgcolor = ($i < 5) ? $color->wday_txt : $color->wend_txt; echo "<td bgcolor='$bgcolor' class='cell'><b>".$d[$i]."</b></td>"; } echo "</tr>"; // první den // hodnota 0 namísto parametru $day v mktime vrátí poslední den předcházejícího měsíce // date ("w") vrátí [0-6] (Ne,Po,Út,..) $date->day = 1 - date ("w", mktime (0, 0, 0, $date->month, 0, $date->year)); $act_month_end = false; for (;;) { // den za dnem $t = mktime (0, 0, 0, $date->month, $date->day++ , $date->year); // číslo měsíce [1-12] $date_n = date ("n", $t); // číslo týdne [0-6] (Ne,Po,Ut,..) $date_w = date ("w", $t); if ($date_n == $date->month) $act_month_end = true; // první pondělí v dalším měsíci - ukončí řádek - konec cyklu if ($act_month_end == true && $date_n != $date->month && $date_w == 1) { echo "</tr>"; break; } // pondělí - nový řádek else if ($date_w == 1) echo "<tr align='center'>"; // předcházející, nebo následující měsíc if ($date_n != $date->month) $bgcolor = ($date_w==0 || $date_w==6) ? $color->wend_noact : $color->wday_noact; // aktuální měsíc else $bgcolor = ($date_w==0 || $date_w==6) ? $color->wend : $color->wday; if (date("dmY",$t) == date("dmY")) $bgcolor = $color->today; $title = date ("j.n. Y", $t); echo "<td title='$title' bgcolor='$bgcolor' class='cell'><a href='go.php?time=$t'>".date ("d", $t)."</a></td>"; // neděle - konec řádku if ($date_w == 0) echo "</tr>"; } echo "</table>"; ?> </body> </html> |
||
Alphard Profil |
#2 · Zasláno: 4. 1. 2009, 01:32:02
„// hodnoty z formuláře, převedeme na time formát
if (isset($month) && isset($year)) “ máte register globals on? dál se mi nechce číst, protože od PHP 5 je výchozí off |
||
Jan Tvrdík Profil |
#3 · Zasláno: 4. 1. 2009, 08:47:16
Pauli
Těch chyb je tam dost. Začal bych takto: <?php define('YEAR_MIN', 1980); define('YEAR_MAX', 2020); define('YEAR_EXTENT', 3); // hodnoty z formuláře, převedeme na time formát if (isset($_GET['month']) && isset($_GET['year'])) $time = mktime (0, 0, 0, $_GET['month'], 1, $_GET['year']); // kontrola začátku a konce roku if (!isset($time) || $time < mktime (0, 0, 0, 1, 1, YEAR_MIN) || $time > mktime (0, 0, 0, 12, 31, YEAR_MAX)) $time = time (); ?> Alphard „protože od PHP 5 je výchozí off“ Ve skutečnosti už od PHP 4.2.0 (vydáno 22. dubna 2002) |
||
Pauli Profil * |
#4 · Zasláno: 4. 1. 2009, 19:30:17
Díky Honzo,
už chodí to roletové menu! Jestli bych tě mohl ještě poprosit o radu, nefungují totiž ty odkazy na následující a předcházející měsíc. // predcházející a následující měsíc $time = mktime (0, 0, 0, $date->month - 1, $date->day, $date->year); echo "<a href='index.php?time=$time'><<</a>"; echo "<b> [ ".$m[$date->month]." $date->year ] </b>"; $time = mktime (0, 0, 0, $date->month + 1, $date->day, $date->year); echo "<a href='index.php?time=$time'>>></a>"; Předem díky za radu! |
||
Pauli Profil * |
Moderátor Chamurappi: Přesunuto z duplicitního vlákna, geniálně nazvaného „Pomozte prosím...“.
Zdravím, mám takový menší problém, potřeboval bych prosím poupravit tento script kalendáře, aby chodil pod php verzí 5 (pod verzí 4 chodí!). Tak kdyby se našel někdo tak hodný, já totiž objektovému php moc nerozumím a to nemluvím o tom, že v php 5 oproti 4 se prý trochu změnila syntaxe. Předem díky za pomoc! Jo něco málo už je opraveno, ale script stále nechodí tak jak má. <?php define('YEAR_MIN', 1980); define('YEAR_MAX', 2020); define('YEAR_EXTENT', 3); // hodnoty z formuláře, převedeme na time formát if (isset($_POST['month']) && isset($_POST['year'])) $time = mktime (0, 0, 0, $_POST['month'], 1, $_POST['year']); // kontrola začátku a konce roku if (!isset($time) || $time < mktime (0, 0, 0, 1, 1, YEAR_MIN) || $time > mktime (0, 0, 0, 12, 31, YEAR_MAX)) $time = time (); ?> <html> <head> <title>Kalendář</title> <style type="text/css"> body { font-family: "ARIAL CE", "HELVETICA CE","ARIAL","HELVETICA"; font-size: 12px; } .cell { width: 22px; height: 22px; font-family: "ARIAL CE", "HELVETICA CE","ARIAL","HELVETICA"; font-size: 12px; font-size: #000000; } </style> </head> <body> <?php class Ccolor { var $wday_txt = "#bbbbdd"; var $wend_txt = "#ddbbbb"; var $wday = "#ccccee"; var $wend = "#eecccc"; var $wday_noact = "#9090a6"; var $wend_noact = "#a69090"; var $today = "#ffffc0"; } // objekt $color = new Ccolor (); class Cdate { var $day; var $month; var $year; function Cdate ($time) { $this->day = date ("j", $time); $this->month = date ("n", $time); $this->year = date ("Y", $time); } } // objekt $date = isset ( $time ) ? new Cdate ( $time ) : new Cdate ( time () ); // názvy měsíců v roce $m = array (1 => "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"); // názvy dní týdne $d = array ("Po", "Ut", "St", "Št", "Pi", "So", "Ne"); // formulář pro výběr měsíce a roku echo "<form action='index.php' method='post'>"; echo "<select name='month'>"; for ($i=1 ; $i<=count($m) ; $i++) echo ($i == $date->month) ? "<option value='$i' selected>$m[$i]" : "<option value='$i'>$m[$i]"; echo "</select>"; echo "<select name='year'>"; $i = ($date->year-YEAR_EXTENT < YEAR_MIN) ? YEAR_MIN : $date->year-YEAR_EXTENT; for ( ; $i<=$date->year+YEAR_EXTENT && $i<=YEAR_MAX; $i++) echo ($i == $date->year) ? "<option value='$i' selected>$i" : "<option value='$i'>$i"; echo "</select>"; echo "<input type='submit' value='Ok'>"; echo "</form>"; // predcházející a následující měsíc $time = mktime (0, 0, 0, $date->month - 1, $date->day, $date->year); echo "<a href='index.php?time=$time'><<</a>"; echo "<b> [ ".$m[$date->month]." $date->year ] </b>"; $time = mktime (0, 0, 0, $date->month + 1, $date->day, $date->year); echo "<a href='index.php?time=$time'>>></a>"; // výpis dní v týdnu echo "<table border='0' cellspacing='1' cellpadding='0'>"; echo "<tr align='center' valign='middle'>"; for ($i=0 ; $i<count($d) ; $i++) { $bgcolor = ($i < 5) ? $color->wday_txt : $color->wend_txt; echo "<td bgcolor='$bgcolor' class='cell'><b>".$d[$i]."</b></td>"; } echo "</tr>"; // první den // hodnota 0 namísto parametru $day v mktime vrátí poslední den předcházejícího měsíce // date ("w") vrátí [0-6] (Ne,Po,Út,..) $date->day = 1 - date ("w", mktime (0, 0, 0, $date->month, 0, $date->year)); $act_month_end = false; for (;;) { // den za dnem $t = mktime (0, 0, 0, $date->month, $date->day++ , $date->year); // číslo měsíce [1-12] $date_n = date ("n", $t); // číslo týdne [0-6] (Ne,Po,Ut,..) $date_w = date ("w", $t); if ($date_n == $date->month) $act_month_end = true; // první pondělí v dalším měsíci - ukončí řádek - konec cyklu if ($act_month_end == true && $date_n != $date->month && $date_w == 1) { echo "</tr>"; break; } // pondělí - nový řádek else if ($date_w == 1) echo "<tr align='center'>"; // předcházející, nebo následující měsíc if ($date_n != $date->month) $bgcolor = ($date_w==0 || $date_w==6) ? $color->wend_noact : $color->wday_noact; // aktuální měsíc else $bgcolor = ($date_w==0 || $date_w==6) ? $color->wend : $color->wday; if (date("dmY",$t) == date("dmY")) $bgcolor = $color->today; $title = date ("j.n. Y", $t); echo "<td title='$title' bgcolor='$bgcolor' class='cell'><a href='go.php?time=$t'>".date ("d", $t)."</a></td>"; // neděle - konec řádku if ($date_w == 0) echo "</tr>"; } echo "</table>"; ?> </body> </html> Předem móóóóóc díky za pomoc. |
||
Pauli Profil * |
#6 · Zasláno: 4. 1. 2009, 23:44:34
Fakt nikdo nepomůže? :-(
|
||
Mastodont Profil |
#7 · Zasláno: 4. 1. 2009, 23:49:15
A co přesně tam nechodí? Výpis hlášení o nějaké chybě by byl?
|
||
Pauli Profil * |
#8 · Zasláno: 4. 1. 2009, 23:59:57
Nefunguje listování v kalendáři.
// predcházející a následující měsíc $time = mktime (0, 0, 0, $date->month - 1, $date->day, $date->year); echo "<a href='index.php?time=$time'><<</a>"; echo "<b> [ ".$m[$date->month]." $date->year ] </b>"; $time = mktime (0, 0, 0, $date->month + 1, $date->day, $date->year); echo "<a href='index.php?time=$time'>>></a>"; |
||
Pauli Profil * |
#9 · Zasláno: 5. 1. 2009, 01:06:13
Už jsem na to přišel sám.... Problém byl s jedním
$_GET['time'] |
||
Časová prodleva: 15 let
|
0