{include title} v komponente?

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

Zdar,
delam takovou navigaci (ktera je resena komponentou) a vzdy posledni cast navigace by mela odpovidat titulku stranky, ktery mam definovany v kazde strance jako {block title}Titulek stranky{/block}.

Komponenta ale tento blok title nevidi. Ale samozrejme, pres promennou $presenter se na parent presenter dokazi dostat, takze bych se nejak k tomu bloku mohl prokousat. Nemate nekdo zkusenost?

Šaman
Člen | 2659
+
0
-

Jestli ti to stačí až při vykreslování, tj. v metodě render() komponenty a potažmo tedy i v její šabloně, tak použij {control myComponent, $title} a v komponentě render($title). Samozřejmě si budeš muset taky upravit definici titulku tak, aby byl v té proměnné a nejen jako blok. třeba {var $title = "Titulek stranky"} … {block title}{$title}{/block}

Ja
Člen | 260
+
0
-

Tak jakoby staci, ale to uz rovnou to tam muzu vstrikavat necim jako $this[‚komponenta‘]->injectTitle(‚muj titulek‘);

takze jakoby toto by slo, ale uz do toho skoro zanasim dalsi necistoty, ktery bych tam radeji nemel, vytahnuti title z nadrazenejch sablon by mi prislo elegantni (jde-li teda se vubec pres ten presenter k nim nejak dostat)

Šaman
Člen | 2659
+
0
-

Právě že tohle je čistější. A pokud bys to potřeboval už pro běh té komponenty, pak to vstřiknout třeba v tovární metodě.

Co když nadřazená šablona nebude mít blok title? V mé ukáce je jasné API – metoda render požaduje předat titulek. Stejně tak, pokud budeš injectovat do nějaké setTitle metody. Ale když se budeš spoléhat na nadřazené šablony, tak už to nebude samostatná komponenta.

Ja
Člen | 260
+
0
-

OK souhlasim,
tak co udelat kompromisoidni reseni typu – v nejakem afterRenderu napr FrontPresenteru, od ktereho mi dedi presentery v public sekci, ten title ze sablony ziskat a vstriknout ho komponente? Jde-li to?

Trochu ted zapasim s casem a nehodi se mi cely projekt prepsat, abych title poskytoval vsude te komponente rucne.