Jaké máte zkušenosti z používáním bloků alias dědičností šablon?
- David Grudl
- Nette Core | 8227
Už je to neuvěřitelný rok a půl, co v Nette šablonách existují bloky a dědičnost (fakt!). Za tu dobu jste si je mohli dostatečně ošahat a zjistit, v čem jsou přínosné a kde jsou naopak jejich slabá místa. Některé připomínky se už na fóru objevily dříve, teď je čas je shrnout. Rád bych od vás slyšel názory, co je fajn, co upravit, na jaké komplikace jste narazili nebo narážíte.
(pozn: s implementací bloků částečně souvisí i snippety, každopádně tyhle témata by zatím nemíchal)
- Dragon Jake
- Člen | 20
S bloky a dědičností jsem si dost užil nedávno při psaní svého osobního webu, takže trochou do mlýna přispěji.
Co je fajn a líbí se mi, jak funguje:
{extends '../@common.phtml'}
, {include #block}
,
{include #block, param => 'val'}
Co by stálo za to: podmíněné bloky (dá se obejít vyřešít přes
{capture}
)
Co jsem nepobral: v případě dědění přes 4 šablony
(@layout.phtml
→ Blog/@headers.phtml
→
Item/show.phtml
→ Blog/show.phtml
) jsem musel u
@headers.phtml
výslovně napsat {extends $layout}
(chyba/záměr?)
To je tak vše, co mě z nedávné zkušenosti napadá…
- Ondřej Mirtes
- Člen | 1536
Bloky jsou moc fajn :) Co bych potřeboval je, aby šablony vykreslovaných
komponent mohly ovlivňovat bloky šablon presenterů. Zní to divoce, ale
potřebuji, aby komponenty mohly ovlivňovat, s jakým CSS/JS soubory se
stránka vykreslí. Nyní je potřeba např. u {widget datagrid}
předefinovávat {block #css}
a {block #js}
a
dopisovat tam všechny soubory, které DataGrid nepotřebuje. U většího
projektu, kde jsou komponenty hojně využívané a potřebují hodně souborů,
to už dost překáží.
Trochu jsem to rozvedl tady: https://forum.nette.org/…n-presenteru. Zatím provizorně používám to první nastíněné řešení, prostě inicializuji všechny komponenty a subkomponenty v afterRender() metodě, takže se to do hlavičky layoutu ještě stihne přidat. Potírám tím lazy filozofii továrniček, ale funguje to bez jakékoli dodatečné syntaxe v šablonách a až se přijde na lepší řešení, můžu tuhle logiku v pozadí předělat, aniž bych musel zasahovat do celého projektu.
- Patrik Votoček
- Člen | 2221
Přidávám se k tomu co tu už zaznělo. Schází mě bublání bloků komponent a captureBlock.
- Vyki
- Člen | 388
Na té prezentaci z poslední
sobory, jsem v čase 1:43 zaznamenal něco
{block meta} {/block}
, ve kterém je blok css kódu. Pojmenovat
blok
názvem meta
asi problém není :o) Pokud to ale
znamená, že ten blok bude „magický“ a bude dělat něco podobného o co
se tu dnes různými způsoby snažíme – probublat bloky css
/
js
až na úroveň, kde se dají sloučit a případně uložit do
jednoho css / js souboru a připojit k @layout, bylo by to
super.
Editoval Vyki (10. 9. 2010 9:25)
- Honza Kuchař
- Člen | 1662
Přidávání CSS/JS do layoutu řeším ručně. Jinak mi nic co se týče bloků nechybí a s radostí je používám.
- Lopo
- Člen | 277
mne osobne aktualne chyba hlavne prave tiez spominane bublanie CSS/JS
zacal som si kvoli tomu aj prerabat WebLoader ale zatial som sa nejako daleko
nedostal (kvoli dovolenke)
dalej mi chyba moznost zadat layout len cez {layout nazovLayoutu} – podobne ako v prezenteri cez setLayout(‚nazovLayoutu‘), tj aby nebolo potrebne pisat cely nazov suboru (so zavinacom a priponou)
tzn asi aby {layout} a {extends} nerobili to iste, ale {layout} fungovalo podobne ako Presenter::setLayout()
k tomu by som celkom uvital nejaky special zapis pre {block}, ktory by fungoval ako {block #x}{include #parent}{/block}, tj automaticky robil include parentu a nebolo nutne vypisovat to explicitne – napr {block ##x}