Otázka ohľadne komponenty

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ruller
Člen | 29
+
0
-

Chcel by som vedieť ako funguje cyklus komponenty, pretože nastáva u mňa dosť čudné chovanie komponenty.
Vykreslujem kalendár pomocou komponenty

class Calendar extends \Nette\Application\UI\Control
{
   /** @persistent */
    private $month;
    /** @persistent */
    private $year;

    public function __construct()
    {
        parent::__construct();

    }

    public function render($year,$month,$zobraz_datum)
    {
        $this->year=$year;$this->month=$month;
        $template = parent::createTemplate();
        $template->setFile(__DIR__ . '/calendar.latte');
       $template->datumy=$zobraz_datum;
        $template->year=$this->year;
         $template->month=$this->month;

        // dalsie operacie
...
...
        $template->render();
    }


}

volám ju v presenteri

protected function createComponentCalendar()
{
    return new Calendar();
}

v šablóne predávam parametre

{control calendar,$year,$month,$zobraz_datum} //rok vykreslenia, mesiac

v zobraz_datum mám pole kde sú rozhrania dátumov ktoré sa majú zvýrazniť pomocou css

$zobraz_datum=array(array("2012-03-21", "2012-03-30"),array("2012-03-07" , "2012-03-21"));

vnútri calendar.latte spúšťam foreach ktorý overuje či aktuálny deň je medzi tými dátumami, volám tam strtotime. ak je tak nastaví sa určité css, lenže nastáva problém, keď vykreslím viac takýchto mesiacov, tak by mali byť zvýraznené oné dátumy, ale zvýrazní sa vždy len posledné array. akokoľvek to prehodím. Môže mi niekto vysvetliť prečo je to tak ?
ten cyklus taký mám že: vykreslenie mesiaca, nastavenie css podľa zobraz_datum, vykreslenie ďalšieho atď lenže stále len podľa poslednej položky v poli sa to zvýrazní.

{foreach $datumy as $i=>$datum}

   {if strtotime($test) >= strtotime($datum[1]) and strtotime($test) <= strtotime($datum[2])}
//nastavenie css
{/if}

   {/foreach}

toto sa overuje pre každý deň v mesiaci
Ďakujem

David Matějka
Moderator | 6445
+
0
-

prvni vec, co se mi nezda, je $datum[1] a $datum[2] – pole jsou cislovany od nuly :)

ruller
Člen | 29
+
0
-

to je pravda, upravil som to pole, original je pole
$zobraz_datum=array(array(„dostupne“,„2012–03–21“, „2012–03–30“),array(„dostupne“,„2012–03–07“ , „2012–03–21“)); $datum[0] je nazov ktory sa nastavi pre class, zmazal som to z toho prikladu.

ruller
Člen | 29
+
0
-

tak vyriešené.
v overovacom foreach som pridal {foreach $datumy as $i=>$datum}

{if strtotime($test) >= strtotime($datum[1]) and strtotime($test) <= strtotime($datum[2])}
//nastavenie css
{/if}
{breakIf je nastavena class}
{/foreach}

pre daný deň nepokračuje foreach keď už má nastavenú class, napadlo ma to až teraz, že prečo vždy len posledné sa zobrazuje