Autor Zpráva
Pauli
Profil *
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'>&lt;&lt;</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'>&gt;&gt;</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
// 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
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 *
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'>&lt;&lt;</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'>&gt;&gt;</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'>&lt;&lt;</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'>&gt;&gt;</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 *
Fakt nikdo nepomůže? :-(
Mastodont
Profil
A co přesně tam nechodí? Výpis hlášení o nějaké chybě by byl?
Pauli
Profil *
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'>&lt;&lt;</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'>&gt;&gt;</a>";
Pauli
Profil *
Už jsem na to přišel sám.... Problém byl s jedním
$_GET['time']
, ale stačilo vymyslet jedno podmínku a vše chodí tak jak má! Ale musím říct, že mi to dalo docela zabrat ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: