Mirin webspace

Nejbohatší život má ten, kdo žije s minimem nároků

28. 2. 2008 Zend Framework

Nová feature partialLoop helperu

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 funkci get_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.