rozsireni (extend) Controlu vcetne jeho sablony
- wdolek
- Člen | 331
v aplikaci jsem si vyrobil komponentu, ktera rozsiruje Control
.
tato komponenta reprezentuje jeden zaznam (obrazek v galerii).
obrazek mohu v aplikaci priradit ruznym jinym entitam (clanek, galerie,
…) – a pro kazdou entitu je vazebni tabulka trosku jina (ale samozrejme
zaklad obrazek-entita je stejny).
napriklad u clanku chci krome samotne vazby ulozit poradi obrazku k clanku, u galerie chci ulozit, zda-li obrazek smi probublat do rodicovskych galerii pri jejich zobrazeni.
moje MediaListItem
komponenta ma tedy tridu
MediaListItem
a sablonu MediaListItem.phtml
. jakym
zpusobem bych mohl tuto tridu rozsirit? – treba na
ArticleMediaListItem
, ktera by v sablone pridala na nejake misto
nejake HTMLko (select
nebo input
pro zadani poradi
polozky).
v MediaListItem.phtml
mam ciste HTML, neni tam zadny
{block ...}{/block}
… nechce se mi delat vice komponent vcetne kompletni sablony.
- wdolek
- Člen | 331
despiq napsal(a):
ruzne rendery
abych pravdu rekl, moc nerozumim :) mel sem za to, ze to cele funguje tak, ze
pri vytvoreni komponenty se automaticky vola render()
class MyControl extends Control {
public function render() {
$template = $this->template;
$template->whatever = 'foo';
// + nejake nastaveni souboru sablony
}
}
v presenteru si pak vyrobim
public function createComponentMyControl() {
return new MyControl();
}
a v sablone presenteru pak proste a jednoduse
{widget MyControl}
… ktera zavola prave fci render()
mno a ja mel na mysli to, jak udelat treba
class MySecondControl extends MyControl {
public function render() { ... }
}
a zaroven, jak vzit sablonu pro MyControl
a neco do ni
naklast… stejne, jako to udelam v bezne sablone – treba layoutu a nejaky
pohled. v layoutu si vyrobim blok {block fooBar}{/block}
a
v samotne sablone pak tento blok naplnim
{block fooBar}Hello Foo!{/block}
… jenze :( komponenty layout-view
nemaji :( ..
- jasir
- Člen | 746
voláš {widget MyControl:paginator}
– volá
renderPaginator()
, viz třeba https://forum.nette.org/…louzi-widget?…
- wdolek
- Člen | 331
jasir: áha… takze k render()
si pridam jeste
renderArticle
(nebo tak neco) a renderGallery
… jen
mi ale vrta hlavou, aby to bylo vice DRY – jak rozsirit tu sablonu
MyControl.phtml
?
- muzu pro kazdy renderer udelat vlastni sablonu – ale v sablonach bude 95% stejneho kodu, coz nebude uplne optimalni, zvlast kdyz budu chtit pozmenit HTML – musel bych prepsat vice sablon
- muzu pouzit jednu sablonu a jen to tam nejak rozvetvit – v pripade, ze mi pribude vice specifickych zobrazeni to pak ale bude pekny zmatek