Vytváření komponent s rozdílými šablonami

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

Jaký je správný postup při vytváření komponent které mají dvě a více možných variant šablon?

Př. mám komponentu která mi vypisuje určité detaily o uživateli. Ale tyto detaily se mi vypisují na dvou místech, jedno je zkrácené info o uživateli a plné info. Takže komponenta má dvě šablony a to která se použije se rozhodne v render metodě. Na jedné stránce se komponenta vykreslí pomocí výchozí render funkce a na druhé stránce se vykreslí pomocí renderZkracena

Jenže problém mi nastal když jsem v té zkrácené kliknul na editaci položky, to se mě pak použila výchozí šablona, takže jsem si tam ještě musel přidat detekci na akci a podle toho když tak ještě upravit která šablona se použije, což asi není úplně moc košér.

Napadlo mě další řešení a to vytvořit si pro každou stránku vlastní komponentu {control userDetailsOverview} a {control userDetails} pro obě createComponent se použije stejná továrnička jen se ji předá info o tom zda zkrácený nebo plný výpis. Výhoda že nemusím detekovat šablonu podle akce, nevýhoda že je to přidání createComponent do presenteru.

Která cesta je správná?

Eda
Backer | 220
+
0
-

Jen bych třídě s komponentou přidal proměnnou public $renderOverview = false; a tu bych pak následně v akci presenteru nastavil, v té druhé pak ne:

// v akci...
$this['userDetail']->renderOverview = true;

V render funkci ve třídě pro komponentu bych se pak rozhodoval na základě té proměnné, jakou zvolím šablonu.

Jan Suchánek
Člen | 404
+
0
-

@Eda: je to vlastně podobné jako v todo, jen by mě zajímalo zda není jednodušší rovnou setovat název šablony, šel by měninit signálem, ale i setovat z presenteru atp.

Editoval jenicek (18. 12. 2013 21:27)

akadlec
Člen | 1326
+
0
-

No takže druhý způsob kombinovaný s prvním ;)