Autor Zpráva
pepepa
Profil *
Ahoj, chtěl jsem se zeptat, jak upravit kalendář tak, aby mi místo čísla měsíce zobrazoval český název měsíce.
Funkci na převod názvů měsíců jsem nalezl, ale nedaří se mi ji implementovat.
České názvy měsíců:
function cesky_mesic($mesic) {
    static $nazvy = array(1 => 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec');
    return $nazvy[$mesic];
}
echo cesky_mesic(date("n")) . "\n";


Kalendář:
<?

// pokud nejsou proměnné zinicializovány, vloží aktuální hodnoty
if(!IsSet($month)) $month = Date("m");
if(!IsSet($year)) $year = Date("Y");

// převod na korektní hodnoty
$year = Date("Y", MkTime(0,0,0, $month, 1, $year));
$month = Date("m", MkTime(0,0,0, $month, 1, $year));

$count_days = Date("t", MkTime(0,0,0, $month, 1, $year)); // počet dnů v měsíci

// ke každému dni přiřadí jeho číslo v týdnu (1 = pondělí, ...)
for($i=1;$i<=$count_days;$i++):
    $date[$i] = Date("w", MkTime(0,0,0,$month,$i,$year));
    if($date[$i]==0) $date[$i] = 7;
endfor;

$first = $date[1];    // číslo prvního dne v měsíci (1 = pondělí, ...)


// vypisuje odkazy pro zobrazení statistiky za dané období
function DateLink($from, $to, $text)
 {
  global $month, $year;
  
  if(MkTime(0,0,0,$month,$from,$year) <= MkTime(0,0,0, Date("m"), Date("d"), Date("Y"))):
      echo '<a href="ukaz.php?month=' . $month . '&year=' . $year . '&from_date=' . $year . '-' . $month . '-' . $from . '&to_date=' . $year . '-' . $month . '-' . $to . '">';
      echo $text;
      echo '</a>';
  else:
      echo $text;
  endif;
 }

?>

<table cellspacing="0" align="center">
<tr><td align="center" colspan="8">

<?

// předchozí, aktuální a následující měsíc
echo '<a href="kalendar.php?month=' . ($month-1) . '&year=' . $year . '">&lt;&lt;</a>&nbsp;&nbsp;&nbsp;';
DateLink(1, $count_days, $month . " / " . $year);    // odkaz na měsíční statistiku
echo '&nbsp;&nbsp;&nbsp;<a href="kalendar.php?month=' . ($month+1) . '&year=' . $year .  '">&gt;&gt;</a>';

?>

</td></tr>
<tr><td>T</td><td>Po</td><td>Út</td><td>St</td><td>Čt</td><td>Pá</td><td>So</td><td>Ne</td></tr>

<?

$day = 0;
for($x=0;$x<=5;$x++):
    echo '<tr><td align="center"><b>';

    // poslední den v týdnu
    
    if($x==0)    // první týden
        $end = 7-$first+1;
    elseif($day+7>=$count_days)    // poslední týden
        $end = $count_days;
    else    // zbylé týdny
        $end = $day+7;

    // odkaz na týdenní statistiku
    DateLink($day+1, $end, $x+1);

    echo '</td>';
    
    for($i=1;$i<=7;$i++):
        echo '<td align="center">';
        $day = $x*7+$i-$first+1; // na základě obou cyklů postupně počítá den
        
        if($date[$day] == $i)
            DateLink($day, $day, $day); // odkaz na denní statistiku
        else
            echo "&nbsp;";    

        echo '</td>';
    endfor;
    echo '</tr>';

    if(!CheckDate($month, $day+1, $year)) break; // pokud neexistuje následující datum, ukončí cyklus
endfor;
?> 

Předem vám moc děkuji.
AM_
Profil
vypadá, že výstup měsíc/rok se generuje na řádku 45 - kdyžtak použij debugger, hledat kde se to vypisuje je jen mravenčí práce která není moc zábavná, ale zvládne si to najít každý...
valecekm
Profil
pepepa:
<?php
function cesky_mesic($mesic) {
	$mesic_o = str_replace(". 0", ". ", $mesic);
	settype($mesic_o, "integer"); 
    static $nazvy = array(1 => 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec');
    return $nazvy[$mesic_o];
}

// pokud nejsou proměnné zinicializovány, vloží aktuální hodnoty
if(!IsSet($month)) $month = Date("m");
if(!IsSet($year)) $year = Date("Y");

// převod na korektní hodnoty
$year = Date("Y", MkTime(0,0,0, $month, 1, $year));
$month = Date("m", MkTime(0,0,0, $month, 1, $year));

$count_days = Date("t", MkTime(0,0,0, $month, 1, $year)); // počet dnů v měsíci

// ke každému dni přiřadí jeho číslo v týdnu (1 = pondělí, ...)
for($i=1;$i<=$count_days;$i++):
    $date[$i] = Date("w", MkTime(0,0,0,$month,$i,$year));
    if($date[$i]==0) $date[$i] = 7;
endfor;

$first = $date[1];    // číslo prvního dne v měsíci (1 = pondělí, ...)


// vypisuje odkazy pro zobrazení statistiky za dané období
function DateLink($from, $to, $text)
 {
  global $month, $year;
  
  if(MkTime(0,0,0,$month,$from,$year) <= MkTime(0,0,0, Date("m"), Date("d"), Date("Y"))):
      echo '<a href="ukaz.php?month=' . $month . '&year=' . $year . '&from_date=' . $year . '-' . $month . '-' . $from . '&to_date=' . $year . '-' . $month . '-' . $to . '">';
      echo $text;
      echo '</a>';
  else:
      echo $text;
  endif;
 }

?>

<table cellspacing="0" align="center">
<tr><td align="center" colspan="8">

<?php

// předchozí, aktuální a následující měsíc
echo '<a href="kalendar.php?month=' . ($month-1) . '&year=' . $year . '">&lt;&lt;</a>&nbsp;&nbsp;&nbsp;';
DateLink(1, $count_days, cesky_mesic($month) . " / " . $year);    // odkaz na měsíční statistiku
echo '&nbsp;&nbsp;&nbsp;<a href="kalendar.php?month=' . ($month+1) . '&year=' . $year .  '">&gt;&gt;</a>';
?>

</td></tr>
<tr><td>T</td><td>Po</td><td>Út</td><td>St</td><td>Čt</td><td>Pá</td><td>So</td><td>Ne</td></tr>

<?php

$day = 0;
for($x=0;$x<=5;$x++):
    echo '<tr><td align="center"><b>';

    // poslední den v týdnu
    
    if($x==0)    // první týden
        $end = 7-$first+1;
    elseif($day+7>=$count_days)    // poslední týden
        $end = $count_days;
    else    // zbylé týdny
        $end = $day+7;

    // odkaz na týdenní statistiku
    DateLink($day+1, $end, $x+1);

    echo '</td>';
    
    for($i=1;$i<=7;$i++):
        echo '<td align="center">';
        $day = $x*7+$i-$first+1; // na základě obou cyklů postupně počítá den
        
        if($date[$day] == $i)
            DateLink($day, $day, $day); // odkaz na denní statistiku
        else
            echo "&nbsp;";    

        echo '</td>';
    endfor;
    echo '</tr>';

    if(!CheckDate($month, $day+1, $year)) break; // pokud neexistuje následující datum, ukončí cyklus
endfor;

?>

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:

0