Prepis obyčajnej php funkcie s výstupom do nette
- xxxmisko
- Člen | 140
Ahojte!
Som v nette nový, učím sa ešte len 2 týždne, už som sa veľa vecí naučil a veľa aj vecí rozbehal, ale teraz prišiel čas niečo vytvoriť a tu som sa zasekol :( . Chcem na stránke zobraziť HTML kód, ktorý mi vráti funkcia. Nette a architektúra MVP však takéto niečo zmietajú zo stola.
Preto prosím každého, kto by ma vedel naviesť, čo a ako napísať, poraďte. Bol by som strašne veľmi rád. Chcem prepísať kód na tejto stránke do nette:
http://davidwalsh.name/php-calendar
Uvažoval som tak, že si vytvorím komponentu podľa tohto: https://doc.nette.org/…n/components návodu, ale problém je v 2 veciach. Nejak sa neorientujem v metódach control, nie je mi zrejmý ich popis a ďalej vôbec neviem, čo mám napísať do šablóny.
Ďakujem za každý konštruktívny návrh.
Ďakujem
- Jan Tvrdík
- Nette guru | 2595
@xxxmisko: Viděl jsi už pla.nette.org/cs/posobota-36-jan-tvrdik-komponenty? Místo toho, aby funkce vracela HTMLko, tak může vracet nějaké strukturované pole, které pak v šabloně vypíšeš.
- xxxmisko
- Člen | 140
No chlapci, doplnok som prerobil podľa prednášky Honzu Tvrdíka.
Trošku ma serú iterácie v šablóne, ale už nemám chuť niečo
riešiť.
Môj počin je zatiaľ takýto nepekný, prosím o pripomienky, resp. ako zrušiť tie iterácie v latte šablóne:
Komponenta
<?php
use Nette\Application\UI;
class CalendarControl extends UI\Control{
private $day;
private $month;
private $year;
public function setDay($day){
$this->day = $day;
}
public function setMonth($month){
$this->month = $month;
}
public function setYear($year){
$this->year = $year;
}
public function render() {
$running_day = date('w',mktime(0,0,0,$this->month,0,$this->year));
$days_in_month = date('t',mktime(0,0,0,$this->month,1,$this->year));
$days_in_this_week = 1;
$day_counter = 0;
$dates_array = array();
$head = array('Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota','Nedeľa');
$this->template->year = $this->year;
$this->template->month = $this->month;
$this->template->day = $this->day;
$this->template->head = $head;
$this->template->running_day = $running_day;
$this->template->days_in_month = $days_in_month;
$this->template->days_in_this_week = $days_in_this_week;
$this->template->day_counter = $day_counter;
$this->template->setFile(__DIR__.'/CalendarControl.latte');
$this->template->render();
}
}
?>
SABLONA
<?php
<table cellpadding="0" cellspacing="0" class="calendar">
<tr class="calendar-row">
{foreach $head as $days}
<td class="calendar-day-head">{$days}</td>
{/foreach}
</tr>
<tr class="calendar-row">
{for $x = 0; $x < $running_day; $x++}
<td class="calendar-day-np"></td>
{$days_in_this_week++}
{/for}
Beziaci den {$running_day}
{for $list_day = 1; $list_day <= $days_in_month; $list_day++}
<td class="calendar-day">
<div class="day-number">{$list_day}</div>
<p>nejaka udalost</p><p>udalost 2</p>
</td>
{if $running_day == 6}
</tr>
{if ($day_counter+1) != $days_in_month}
<tr class="calendar-row">
{/if}
{$running_day = -1}
{$days_in_this_week = 0}
{/if}
{$days_in_this_week++}
{$running_day++}
{$day_counter++}
{/for}
</tr>
</table>
{$day}:{$month}:{$year}
<style>
/* calendar */
table.calendar { border-left:1px solid #999; }
tr.calendar-row { }
td.calendar-day { min-height:80px; font-size:11px; position:relative; } * html div.calendar-day { height:80px; }
td.calendar-day:hover { background:#eceff5; }
td.calendar-day-np { background:#eee; min-height:80px; } * html div.calendar-day-np { height:80px; }
td.calendar-day-head { background:#ccc; font-weight:bold; text-align:center; width:120px; padding:5px; border-bottom:1px solid #999; border-top:1px solid #999; border-right:1px solid #999; }
div.day-number { background:#999; 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:120px; padding:5px; border-bottom:1px solid #999; border-right:1px solid #999; }
</style>
?>
TOVARNICKA
<?php
protected function createComponentCalendar() {
$calendar = new CalendarControl();
$calendar->setYear('2015');
$calendar->setMonth('8');
$calendar->setDay('19');
return $calendar;
}
?>
Vypis tovarnicky {control calendar}
Naozaj, ak niekto nájde odvahu pozrieť to, dajte mi vedieť, čo je zlé a ako by som to mal upraviť.
Ďakujem