Jednoduchý kalendář, přes funkci v Modelu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- kralik
- Člen | 230
Ahoj Netťáci,
sháněl jsem jednoduchý kalendář a nějak se mi to nepodařilo, tak jsem
zkusil jeden kalendářík (opravdu simply) dát dohromady.
Doufám, že se to někomu z vás bude hodit.
Verze: PHP 5.3.5, Nette Framework 2.0.3 (revision eb558ae released on 2012–04–04)
Původní verze: zde
V modelu:
<?php
public static function kalendar($mesic,$rok){
$kalendar = '<table cellpadding="0" cellspacing="0" class="calendar">';
/* hlavicka tabulky */
$kalendar = '<table cellpadding="0" cellspacing="0" class="calendar">';
$hlavicka = array('Po','Út','St','Čt','Pá','So','Ne');
$kalendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$hlavicka).'</td></tr>';
$start = date('N',mktime(0,0,0,$mesic,1,$rok)); // prvni den v mesici
$pocetDni = date('t',mktime(0,0,0,$mesic,1,$rok)); // počet dni mesici
$dniVtydnu = 1;
$kalendar.= '<tr class="calendar-row">';
// prazdne bunky pred 1.
for($x = 1; $x < $start; $x++):
$kalendar.= '<td class="calendar-day-np"> </td>';
$dniVtydnu++; //,
endfor;
for($den = 1; $den <= $pocetDni; $den++):
if($dniVtydnu <= 7){ //tyden ma 7 dni
$kalendar.= '<td class="calendar-day">';
//pro ukazku je zde uveden i mozny odkaz
$kalendar.= '<a href="kalendar?datum='.$rok.'-'.$mesic.'-'.$den.'"><div class="day-number">'.$den.'</div></a>';
$dniVtydnu++; //,
}
if($dniVtydnu > 7){ //tyden ma 7 dni
if($den!=$pocetDni){
$kalendar.= '<tr class="calendar-row">';
$dniVtydnu=1; //,
}
}
endfor;
// prazdne bunky za poslednim dnem v mesici
for($y = $dniVtydnu-1; $y < 7; $y++):
$kalendar.= '<td class="calendar-day-np"> </td>';
endfor;
$kalendar.= '</tr>';
$kalendar.= '</table>';
return $kalendar;
}
?>
V presenteru
<?php
public function renderKalendar()
{
$mesic = date('n');
$rok = date('Y');
$cal= Funkce::kalendar($mesic,$rok);
$this->template->cal = $cal;
$this->template->mesic = $mesic;
$this->template->rok = $rok;
}
?>
V šabloně .latte
<?php
<h2>Měsíc: {$mesic}/{$rok}</h2>
{!$cal}
?>
CSS
<?php
/* kalendar */
table.calendar { border-left:1px solid #999; }
tr.calendar-row { }
td.calendar-day { min-height:30px; font-size:11px; position:relative; } * html div.calendar-day { height:30px; }
td.calendar-day:hover { background:#eceff5; }
td.calendar-day-np { background:#DADADA; min-height:30px; } * html div.calendar-day-np { height:30px; }
td.calendar-day-head { background:#fff; color: #3791D7; font-weight:bold; text-align:center; width:30px; padding:5px; border-bottom:1px solid #4B9BEB; border-top:1px solid #4B9BEB; border-right:1px solid #4B9BEB; }
div.day-number { background:#3791D7; padding:5px; color:#fff; font-weight:bold; float:right; margin:-5px -5px 0 0; width:20px; text-align:center; }
/* shared */
td.calendar-day, td.calendar-day-np { width:30px; padding:5px; border-bottom:1px solid #4B9BEB; border-right:1px solid #999; }
table.calendar a {
text-decoration: none;
color: #FFF;
}
?>
Editoval kralik (20. 7. 2012 9:58)
- Filip Procházka
- Moderator | 4668
Otřesné. Opravdu otřesné.
Rozděl to na komponentu, šablonu a nějaký model co počítá ty dny.
- Tomáš Votruba
- Moderator | 1114
K inspiraci se můžeš kouknout na tuto komponentu, kterou jsem kdysi zkusil rozjet.