$ nebo # u proměnných šablon

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

Jednoduchá otázka. Nevěděl jsem, proč je někdy u proměnné $ a někdy #. Z toho co jsem zkoušel hledat si myslím, že # označuje blok. To bohužel přineslo více otázek než odpovědí. Je někde napsáno více o blocích než v Template Filters, tam jsem to moc nepochopil.

V novém skeletonu je v šabloně @layout {include #content}. Proč je tam teď # a ne dolar? V šabloně default je navíc {block #content}. Co to znamená?

Díky

//Editoval Tomik: v předmětu opraven $…

Editoval Martin Mates (28. 8. 2009 19:25)

Panda
Člen | 569
+
0
-

{block #content} – blok, který se jmenuje content.
{include #content} – vložení bloku, který se jmenuje content.

„Nové šablony“ umožňují „dědění bloků“, což ve své podstatě znamená, že do jedné šablony je možné vkládat bloky z jiných šablon, případně přepsat bloky stávající. Slouží na to makro {extends}, které říká, že tato šablona rozšiřuje šablonu, která je v makru uvedena. Při zapnutí nových šablon (tedy při nastavení Presenter::$oldLayoutMode = FALSE;) automaticky šablona akce (např. default.phtml) rozšiřuje šablonu layoutu (@layout.phtml). Jeho neuvedení je v podstatě totéž, jako kdybychom na začátek šablony zapsali

{extends $layout} {* v proměnné $layout je celá cesta k šabloně layoutu *}

Pokud máme šablonu akce umístěnou například ve složce app/templates/Homepage a chceme, aby rozšiřovala šablonu @layout2.phtml umístěnou ve složce app/templates, můžeme to zapsat takto:

{extends ../@layout2.phtml}

Přepisování bloků může vypadat nějak takto:

@layout.phtml:

{* ... *}

{block #header}
<h1>Hlavička</h1>
{/block}

{* ... *}

<presenter>/<action>.phtml:

{* ... *}

{block #header}
<h1>Hlavička podstránky</h1>
{/block}

{* ... *}

Pokud v šabloně akce nebude uveden blok header, zobrazí se v hlavičce stránky nápis „Hlavička“. Pokud tam však takový blok bude, bude jeho výchozí obsah přepsán obsahem bloku z šablony akce, v našem případě tedy „Hlavička podstránky“.

Jinak otazník jsem nikde neviděl, nespletl sis to například se symbolem dolaru? Ve „starých šablonách“ se zapisovalo v layoutu {include $content} – v proměnné byl přiřazen objekt, který reprezentoval šablonu akce (tedy například zmiňovaný default.phtml). Vkládal se vždy celý jeho obsah a nebylo možno přímo z šablony zasahovat do jiných částí stránky.

Ondřej Mirtes
Člen | 1536
+
0
-

Otazníkem jsi myslel možná toto (je to také součástí „starého“ způsobu šablon):

{?$content->render()}

Nový způsob šablon také dobře vysvětlil David na hradecké poslední sobotě. Nutno ale podotknout, že v nich stále dobře nefunguje AJAX (potřebuje zavináčovou magii).

Patrik Votoček
Člen | 2221
+
0
-

LastHunter napsal(a):

hradecké poslední sobotě

Snažím se zjistit kdy byla PS v Hradci ale nejak me to hlava nebere… (bylo to v pardubicích)

Původní 720p video v mp4 (cca 1GB)

Martin Mates
Člen | 179
+
0
-

Díky moc, už je to jasné! Samozřejmě, že jsem myslel dolar. Omlouvám se za zmatky. Opravím post.

Ondřej Mirtes
Člen | 1536
+
0
-

vrtak-cz napsal(a):

LastHunter napsal(a):

hradecké poslední sobotě

Snažím se zjistit kdy byla PS v Hradci ale nejak me to hlava nebere… (bylo to v pardubicích)

Původní 720p video v mp4 (cca 1GB)

Sorry, já tam nebyl a tyto dvě města snadno zaměním :)

jarks
Člen | 94
+
0
-

Zkoušel jsem migrovat starší projekt na novější Nette0.9.2-dev, 1025fea released on 2009–10–22 a zjistil jsem, že tady snad nikde není jasně řečeno, co v té prezentaci:

Jestliže chceme začít používat nové šablony, pak je třeba:

  1. v @layout.phtml zaměnit @{include $content} za @{include #content} (křížek místo dolaru)
  2. ve všech šablonách, které mají povahu content, dát na začátek @{block #content}

Do té doby bude naše aplikace zobrazovat jen „prostředky“. Pak teprve se můžeme pustit do zkoušení nových vlastností.

Ondřej Mirtes
Člen | 1536
+
0
-

jarks napsal(a):

Zkoušel jsem migrovat starší projekt na novější Nette0.9.2-dev, 1025fea released on 2009–10–22 a zjistil jsem, že tady snad nikde není jasně řečeno, co v té prezentaci:

Jestliže chceme začít používat nové šablony, pak je třeba:

  1. v @layout.phtml zaměnit @{include $content} za @{include #content} (křížek místo dolaru)
  2. ve všech šablonách, které mají povahu content, dát na začátek @{block #content}

Do té doby bude naše aplikace zobrazovat jen „prostředky“. Pak teprve se můžeme pustit do zkoušení nových vlastností.

Něco je tady, ale není to moc detailní.
BTW: Ty zavináče bys neměl dávat všude, jen tam, kde pracuješ se snippety (AJAXem). Viz zavináčová magie.

jarks
Člen | 94
+
0
-

Díky. Právě jsem dokoukal video z WebExpa (ovoce v košíku) a tam to v jednom místě skoro vypadá, že ty zavináče snad brzy zmizí.