Šablona a layout – renderování v opačném pořadí
- jasir
- Člen | 746
Možná bych zrušil (používá to někdo?) zachytávání do proměnné přes
{block $prom}...{/block}
. Dá se to myslím řešit obecněji přes modifikátor, tj.{block|capture:$prom}...{/block}
. Nebo přidat srozumitelnější{capture $prom}...{/capture}
.
Jsem pro přidání {capture $variable}...{/capture}
.
Odstraněním této (nepříliš využívané?) funkčnosti z
{block}
dojde k větší přehlednosti kódu. {block}
se stává základním stavebním kamenem šablon a layoutů a tak je
nežádoucí mít v šabloně použití bloků pro dvě moc nesouvisející
funkcionality.
- jasir
- Člen | 746
V další revizi bude
{extends '@layout.phtml'}
automatické a nepovinné, tj. pokud bude existovat layout, automaticky se bude extendovat. Tedy jestli to uživatel nepřebije pomocí vlastní direktivy{extends neco-jineho}
. Tím vlastně ztrácí na důležitosti metoda setLayout(), respektive její použití se přesune tam kam patří, do šablony.
Tohle vypadá úplně skvěle. Přesun ovládání layoutu do šablon je
prostě pecka :) Přesto mám ještě otázku k setLayout()
.
Předpokládám, že funkčnost bude taková, že pokud v Presenteru
budu mít:
<?php
$this->setLayout('@mujlayout.phtml');
?>
Dojde k automatickému extendování na tento layout
@mujlayout.phtml
→ tedy automatické bude
{extends $presenter->getLayout()}
, nikoliv na specifické
{extends '@layout.phtml'}
?
Editoval jasir (5. 5. 2009 10:35)
- Patrik Votoček
- Člen | 2221
David Grudl napsal(a):
Ano, alespoň v tuto chvíli tomu tak je.
V další revizi bude
{extends '@layout.phtml'}
automatické a nepovinné, tj. pokud bude existovat layout, automaticky se bude extendovat. Tedy jestli to uživatel nepřebije pomocí vlastní direktivy{extends neco-jineho}
. Tím vlastně ztrácí na důležitosti metoda setLayout(), respektive její použití se přesune tam kam patří, do šablony.
Super
David Grudl napsal(a):
Možná bych zrušil (používá to někdo?) zachytávání do proměnné přes
{block $prom}...{/block}
. Dá se to myslím řešit obecněji přes modifikátor, tj.{block|capture:$prom}...{/block}
. Nebo přidat srozumitelnější{capture $prom}...{/capture}
.
To tam fakt je? To jsem nevěděl. Njn to je ta nedokonala dokumentace… :-(
Btw ta další revize bude kdy?
- Patrik Votoček
- Člen | 2221
jasir napsal(a):
V další revizi bude
{extends '@layout.phtml'}
automatické a nepovinné, tj. pokud bude existovat layout, automaticky se bude extendovat. Tedy jestli to uživatel nepřebije pomocí vlastní direktivy{extends neco-jineho}
. Tím vlastně ztrácí na důležitosti metoda setLayout(), respektive její použití se přesune tam kam patří, do šablony.Tohle vypadá úplně skvěle. Přesun ovládání layoutu do šablon je prostě pecka :) Přesto mám ještě otázku k
setLayout()
. Předpokládám, že funkčnost bude taková, že pokud v Presenteru budu mít:<?php $this->setLayout('@mujlayout.phtml'); ?>
Dojde k automatickému extendování na tento layout
@mujlayout.phtml
→ tedy automatické bude{extends $presenter->getLayout()}
, nikoliv na specifické
{extends '@layout.phtml'}
?
V to doufám taky… :-)
- Patrik Votoček
- Člen | 2221
Honza M. napsal(a):
No tohle zrovna v dokumentaci je…
Měl bych se jít vážně vyspat protože už jsem asi vážně slepej… :-( Sem si toho nevšiml… :-(
- Honza Marek
- Člen | 1664
Assign je normální přiřazení do proměnné a assign vypsání výstupu a jeho zachycení. Nemyslim si, že je to to samé…
- xificurk
- Člen | 121
Honza M. napsal(a):
Assign je normální přiřazení do proměnné a assign vypsání výstupu a jeho zachycení. Nemyslim si, že je to to samé…
Otázka je, zda právě toto chování nezměnit – přijde mi, že buď potřebuju blok zachytit do proměnné a dál s tím pracovat, nebo blok vypsat. Nedokážu si představit situaci, kdy by bylo potřeba obojí najednou (leda tak nějaké kešování, ale to by se imho mělo řešit jinak).
- mancze
- Člen | 58
Numůžu si pomoct, ale párový assign bych prostě viděl tak trochu jako xml-like assign. Nedělá nic jiného, než proměnné nastaví hodnotu rovnou vnitřku bloku (pravda, zpracovaného). Pořád v tom vidím zjednodušení v tom, že bude o blok k pamatování míň.
{assign $var 'foobar'}
{assign $var}foobar{/assign}
{assign $var}{if $expression}foo{else /}bar{/if}{/assign}
- martin.doubravsky
- Člen | 7
Zdravím,
i přes přečtení fóra u nette postrádám jednu velmi zásadní funkci. Tou je v Djangu {{ block.super }}.
Jednoduše: {{ block.super }} returns value of the most remote ancestor
popis funkčnosti viz http://code.djangoproject.com/ticket/501
Sice jsem nalezl určité náznaky jak si sáhnout na rodiče, ale vždy šlo o přepsání rodiče, nikoliv o jeho doplňení/rozšíření.
Při stavbě webu využívající dědičnosti šablon je tato funkce podstatná a nenahraditelná.
Dejte mi prosím vědět, zda podobná funkce již existuje či bude implementována. Velmi to ocením.
Hezký den,
Martin Doubravský
- Patrik Votoček
- Člen | 2221
Mělo by to fungovat takto:
Template A.phtml:
{block #abc}A{/block}
Template B.phtml:
{extends "A.phtml"}
{block #abc}{include #parent}A{/block}
Editoval vrtak-cz (8. 6. 2009 18:15)
- martin.doubravsky
- Člen | 7
diky za rychlou odpoved.
mrknete na http://www.pluf.org/ – php obdoba djanga (jak se na strankach zminuji), zda se ze by to mohl byt solidni projekt..
- Ondřej Mirtes
- Člen | 1536
Jaká je aktuální situace okolo těchto nových šablon? Dostal jsem se na jednom webu do fáze, kdy by se mi hodně hodily a nerad bych to stavěl na něčem, co možná dozná změn. A jak jsem to zkoušel, tak mi ani s, ani bez zavináčů, nezafungovaly AJAX snippety. Takže se nemůžu dočkat :)
Bude se tedy někde něco měnit nebo už jsou ve finální fázi?
- PetrP
- Člen | 587
LastHunter napsal(a):
Bude se tedy někde něco měnit nebo už jsou ve finální fázi?
No na poslední sobotě říkal david že novou verzi má „napsanou: (nebo tak ňák)“ a jen jí comitne, ale že ten týden, na to nebude mít čas. No a to už jsou 3 týdny. Takže jak tak hádám touhle dobou už možná uvažuje, že to začne psát… ;]
Nicméně mi to chápeme, jsou důležitější věci na práci: tequila, opájení se svou výjimečností, nebo psaní stovky příspěvků na fórum aby to vypadalo že nette má velkou komunitu ;]
(Možná to je ale už jinak kdo ví.)
- Ondřej Mirtes
- Člen | 1536
PetrP napsal(a):
LastHunter napsal(a):
Bude se tedy někde něco měnit nebo už jsou ve finální fázi?
No na poslední sobotě říkal david že novou verzi má „napsanou: (nebo tak ňák)“ a jen jí comitne, ale že ten týden, na to nebude mít čas. No a to už jsou 3 týdny. Takže jak tak hádám touhle dobou už možná uvažuje, že to začne psát… ;]
Nicméně mi to chápeme, jsou důležitější věci na práci: tequila, opájení se svou výjimečností, nebo psaní stovky příspěvků na fórum aby to vypadalo že nette má velkou komunitu ;]
(Možná to je ale už jinak kdo ví.)
Právě si taky pamatuju, že něco takového říkal, ale je to už dlouho, tak jsem si říkal, jestli mi něco neuniklo :)
- David Grudl
- Nette Core | 8218
Bloky a dědění šablon by už mělo být plně funkční, používají to i příklady v distribuci. Testujte!
Zbývá pořešit jednu věc – a tou jsou snippety & AJAX. Řešení bych měl mít někdy v týdnu.
- Inza
- Člen | 330
Potřebuju aby někdo udělal nástřel kuchařky k těmto pokročilým šablonám – a nebo to zkusím napsat, ale někdo to musíte po mě opravit…páč určitě budu povídat kraviny páč jsem to ještě moc nepoužíval..
Pokročilé šablony nejsou zatím zdokumentovány vůbec a je to jedna z důležitých věcí co je třeba IMHO ASAP zdokumentovat… alespoň částečně a i třeba udělat beta doku verzi…
- Ondřej Mirtes
- Člen | 1536
Inza napsal(a):
Potřebuju aby někdo udělal nástřel kuchařky k těmto pokročilým šablonám – a nebo to zkusím napsat, ale někdo to musíte po mě opravit…páč určitě budu povídat kraviny páč jsem to ještě moc nepoužíval..
Pokročilé šablony nejsou zatím zdokumentovány vůbec a je to jedna z důležitých věcí co je třeba IMHO ASAP zdokumentovat… alespoň částečně a i třeba udělat beta doku verzi…
David sliboval před nějakou dobou článek o těchto šablonách na phpFashion, takže by se z něj dalo dobře vycházet. Ale kde nic, tu nic…
A navíc je IMHO pro Ajax stále potřeba zavináčová magie, čeká se na její odstranění.
- David Grudl
- Nette Core | 8218
jasir napsal(a):
Jsem pro přidání
{capture $variable}...{/capture}
. Odstraněním této (nepříliš využívané?) funkčnosti z{block}
dojde k větší přehlednosti kódu.{block}
se stává základním stavebním kamenem šablon a layoutů a tak je nežádoucí mít v šabloně použití bloků pro dvě moc nesouvisející funkcionality.
Stalo se. {block $variable}
je deprecated a nahrazeno
za {capture $variable}