Vylepšení šablonovacího jazyka
- Endrju
- Člen | 147
Lze pouzit neco takoveho v sablonach?
Mam sablonou layoutu @layout.phtml
:
<html>
<head>
...
<title>{include #title} | Nazev webu</title>
</head>
<body>
<div id="box_content">
<div id="page_title">{include #title}</div>
<div id="buttons" n:block="#titleButtons">{include #titleButtons}</div>
{include #content}
</div>
</body>
</html>
Mam sablonou default akce default.phtml
, kreta se nacita do
layoutu v miste {include #content}:
{block #title}Titulek stranky{/block}
{block #titleButtons}<a href="{plink //add}">Odkaz na akci přidat</a>{/block}
{block #content}
....
{/block}
O co mi jde? Kdyz v default.phtml nenapisu block
{block #titleButtons}<a href="{plink //add}">Odkaz na akci přidat</a>{/block}
(neuvedu ho.. z chci ho do layoutu includovat jen na nekterych strankach),
zajisti mi n:block="#titleButtons"
v sablone layoutu, ze se proste
tento block nebude includovat, kdyz neni definovany? Jde to nejak vubec udelat?
Kdyz po pouziju takto, tak mi da se rict spadne Apache…
- Tharos
- Člen | 1030
Pro tyto účely se myslím běžně používají prázdné definice bloků, v @layout.phtml například:
...
{block #title}{/block}
...
který v šabloně view poté předefinuješ:
...
{block #title}<h1>Nějaký titulek</h1>{/block}
...
Ten zápis
<div id="buttons" n:block="#titleButtons">{include #titleButtons}</div>
podle mě nedává moc smysl.
Někde se tu na fóru povaluje odkaz na záznam z nějaké relativně nedávné poslední soboty, kde má David o nových šablonách přednášku. Tam jsou kompletní odpovědi na všechny tyto otázky, vřele doporučuji :).
Editoval Tharos (10. 3. 2010 0:44)
- Etch
- Člen | 403
Ale k tomu tam přece vůbec nepotřebuješ ten
{include #titleButtons}
, ale pouze
<div id="buttons" n:inner-block="#titleButtons"></div>
pak pokud blok uvedeš v default.phtml tak to bude generovat
<div id="buttons">
//obsah
</div>
pokud block v default.phtml neuvedeš bude se generovat
<div id="buttons"></div>
- Endrju
- Člen | 147
Etch, krasa, presne tohle jsme potreboval.. Nette je strasne cool a sexy hehe :)).
Nevedel jsem ze tahle konstrukce vlastne zahrnuje to include.
<div id="buttons" n:inner-block="#titleButtons"></div>
Myslel jsem si, ze jen kontroluje, zda ten blok existuje. Pokud ne, tak se neprovede obsah toho co je v innerHtml a pokud jo, tak by tam muselo byt uvedeno to include. Takze jsem si to myslel blbe a tohle je vlastne jeste logictejsi.. :).
Diky
- fak
- Člen | 48
Nechcete tenhle zápis taky hodit do dokumentace k šablonám? je to už půl roku stará novinka a nikde jsem to tam nenašel a nevím co všechno se takhle dá používat:(
Přijde mi, že aby se člověk naučil v Nette, tak musí projet celý forum, protože dokumentace/quick start je už měsíc ‚under construction‘:(
takže jedinej kdo umí celý Nette je pak jen David:(
Editoval fak (25. 3. 2010 9:22)
- Mesiah
- Člen | 240
ahoj,
mám takový návrh na změnu v Latte filteru…
Jde o tohle:
{plink Products:detail, id => $productId}
Osobně si myslím, že by bylo vhodnější šipku otočit, v aktuálním
směru spíše říká z id do $productId, ale podle mě by měla spíše
vyjadřovat: hodnotu $productId dej do id, takže:
{plink Products:detail, id <= $productId}
jde o hloupost, spousta lidí je určitě zvyklá na současný způsob, ale
třeba někdy, jednou… :)
- Patrik Votoček
- Člen | 2221
Ta šipka tam je takhle protože je to vlastnost jazyka (PHP). Kde je syntax KLÍČ ⇒ HODNOTA. (viz asociativní pole v PHP). Kdyby to bylo naopak je to daleko větší WTF než teď.
- Patrik Votoček
- Člen | 2221
Tady jde o nějaké programátorské zvyklosti a upřímně řečeno já osobně neznám jazyk, který by to řešil tak jak popisuje Mesiah.
- redhead
- Člen | 1313
hrach napsal(a):
pokud bychom to brali opravdu logicky a dle zvyklostí, tak by tam mělo být pouze
=
– to je totiž to, co se používá pro přiřazení.
Souhlas. Když jsem poprvé viděl (tehdá ještě) CurlyBracketsFilter, tak jsem si řikal proč nepsat pouze = když je to logické přiřazení proměnné.
- Majkl578
- Moderator | 1364
hrach napsal(a):
Majkl: to je vidět, že si vůbec nepochopil, že ta připomínka není vztahována k php. Jde o to, že v plink žádný jazyková konstrukce jako array( není, a z toho důvodu je naprosto přirozené nad tím uvažovat tak, jako to dělá Mesiah.
Já pouze vycházím ze zažitých věcí. Tahle struktura je obecná pro Latte
filter, ne jen pro tohle makro. Navíc, jde o parametry, které se v PHP
zapisují pomocí
$presenter->link('this', array('foo' => 1, 'bar' => 2))
.
- Blizzy
- Člen | 149
Mesiah napsal(a):
ahoj,
mám takový návrh na změnu v Latte filteru…
Jde o tohle:
{plink Products:detail, id => $productId}
Osobně si myslím, že by bylo vhodnější šipku otočit, v aktuálním směru spíše říká z id do $productId, ale podle mě by měla spíše vyjadřovat: hodnotu $productId dej do id, takže:
{plink Products:detail, id <= $productId}
jde o hloupost, spousta lidí je určitě zvyklá na současný způsob, ale třeba někdy, jednou… :)
Mě se zase líbí současná šipka vpravo. Říká: Jako id
použij $productId
(když se tě někdo zeptá na id
,
použij číslo $productId
). Prostě mi to přijde spíš jako
vztah klíč a hodnota, kde klíč vede na hodnotu, než nějaké plnění
proměnných, protože do odkazu je skutečně předáno těchto několik
uspořádaných dvojic.
Prostě při psaní makra plink žádná proměnná ani místo v paměti
označené id
není, id
je v odkazu jen symbol, a
spíše než přesunutí dat do něj, mi to přijde jako definice hodnoty
symbolu. Je to jednorázová definice symbolu, ne nějaký přesun nebo
naplnění proměnné, proto by měla být šipka vpravo.
Nevím, jak jinak bych to napsal, ale je snad srozumitelné, jak to myslím. V případě nepochopení doporučuji přečíst vícekrát a opravdu se nad tím zamyslet :-).
Editoval Blizzy (26. 7. 2010 0:23)
- JakubKohout
- Člen | 92
Takže začneme psát
$fooObject <- fooMethod();
Protože fooMethod náleží objektu fooObject …
Hloupost :) aktuální syntaxe (=>) je dostatečně srozumitelná …
- kravčo
- Člen | 721
Mesiah napsal(a):
ahoj,
mám takový návrh na změnu v Latte filteru…
Jde o tohle:
{plink Products:detail, id => $productId}
Osobně si myslím, že by bylo vhodnější šipku otočit, v aktuálním směru spíše říká z id do $productId, ale podle mě by měla spíše vyjadřovat: hodnotu $productId dej do id, takže:
{plink Products:detail, id <= $productId}
jde o hloupost, spousta lidí je určitě zvyklá na současný způsob, ale třeba někdy, jednou… :)
Súčasné riešenie je jednoduchšie parsovateľné, pretože výčet
parametrov sa *jednoducho** obalí medzi array(
a )
,
nakoľko je syntax zhodná s PHP. Takáto zmena by zrejme skomplikovala (a
spomalila) parsovanie, taktiež by bolo nutné obdobie dvojitej notácie
(keďže by to bol veľký BC break). Navyše, vyššia logika/čitateľnosť
nového zápisu je otázna. Z týchto dôvodov sa tebou navrhovaná zmena
zrejme vo frameworku neobjaví.
*call stack