Jak jsem již před nedávnem psal, v novém Zend Frameworku (včera vyšel update stabilní řady 1.0.4 a také release candidate 1 verze 1.5.0) je kromě jiného i nová řada view helperů a jedním z nich je i Partial view helper. Ten slouží k zjednodušení práce s opakujícími se kusy view kódu. Ruku v ruce s ním jde i PartialLoop view helper, ten se hodí na případy opakujících se částí view v cyklech.
O partial view helperu jsem tedy již psal, jen je důležité poznamenat, že partial helper používá pro zobrazení určeného skriptu nezávislé view. Na to je třeba dát pozor pokud používáte viewRenderer a do jeho view třeba někde v controller pluginu nastavíte nějakou proměnnou. V partial view se k této proměnné nemáte šanci dostat!
Teď k PartialLoop, což je to potomek partial helperu. Pokud použiji příklad z předešlého článku, tak pokud máme ve view třeba pole článků
$this->articles = array ( array("title"=>"first article", "excerpt"=>"nice first article"), array("title"=>"second article", "excerpt"=>"nice second article") );
tak můžeme přes samotný partial zobrazit seznam článků takto
<ul> <?php foreach($this->articles as $article):?> <?php echo $this->partial('pArticle.phtml',$article)?> <?php endforeach?> </ul>
pArticle.phtml
šablona pro jeden článek
<li>title - <?php echo $this->title?></li> <li>excerpt - <?php echo $this->excerpt?></li>
PartialLoop nám ušetří cyklus ve view.
<ul> <?php $this->partialLoop("pArticle.phmtl",$this->articles)?> </ul>
Je dobré si všimnout, jak se partialLoop
a zejména partial
vlastně chovají. PartialLoop
provádí iteraci přes objekt, který je mu podhozen jako druhý parametr (kromě pole to může být cokoli, co implementuje rozhraní Iterator) a pro každou iterovanou položku volá partial
a do jeho view nastaví proměnné pojmenované podle klíčů
iterovaných položek na hodnoty iterovaných položek.
PartialLoop proto můžeme používat
- na pole/iterátor polí
- na pole/iterátor objektů, které implementují metodu toArray(), chování je pak podobné jako v předchozím případě
- na pole/iterátor jakýchkoli objektů, pak
partial
helper použije na nastavení proměnných ve svém view funkciget_object_vars
aplikovanou na jednotlivé objekty pole.
Tohle všechno se dočtěte i v manuálu, takové chování se ale moc nehodí na pole business/model objektů (ve smyslu MVC ), protože ty dost často (alespoň v mém případě) nesplňují výše uvedené podmínky, nebo se prostě chovají jinak.
Chtělo by to něco, co by umožňovalo použít v partialLoop pole jakýchkoli objektů. A právě tato funkcionalita nakonec do partial view helperu (ano tam, je to přece rodič partialLoop) přidaná byla, ale v manuálu zmiňována zatím není. Je možné určit jméno proměnné, pod kterým se v partial view objekty z pole nastaví. Uff, raději příklad.
Máme tedy pole článků - $articles
, kde každý článek je obecným model
objektem. Pak partialLoop použijeme následovně
<?php echo $this->partialLoop()->setObjectKey('article') ->partialLoop("pArticle.phtml",$this->articles) ?>
Nová je právě metoda setObjectKey
, kterou určíme jméno pro objekt v partial view šabloně.
pArticle.phtml
šablona pro článek pak bude vypadat například takto (náš business objekt pro článek má třeba metody getTitle() a getExcerpt())
<li>title - <?php echo $this->article->getTitle()?></li> <li>excerpt - <?php echo $this->article->getExcerpt()?></li>
Takového chování nešlo dříve s partialLoop helperem dosánout. Je to přesně to, co mi na implementaci partial view helperů scházelo.
Komentáře (0)
Komentáře jsou uzavřeny.