Šablony v nette začátečník

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

1. Jaký je rozdíl v nette mezi layoutem a šablonou?
šablona se vkládá do souborů třeba default.latte Laout je CSS styl?

2. Není mi moc jasné defaultní vybírání šablon presenterem. Defaultně vybere @layout.latte globální šablonu třeba příklad. Šlo by uvést krátký příklad prosím.
Ale když je název presenteru třeba AuthPresenter nebo PagePresenter a nepoužívá se metody setLayout() & setView() tak jakým způsobem pak nette generuje název šablony.

3. Když chci mít vícero šablon třeba v modulu AdminModule/Templates/
první ve složce AdminModule/Templates/default <br />
drouhou ve složce AdminModule/Templates/modrý<br />
a třetí ve složce AdminModule/Templates/zelený<br />
A šlo by to udělat třeba včetně Css v té samé složce například takto
AdminModule/Templates/zelený/css a obrázků
AdminModule/Templates/zelený/img

Jak toho nejelegantněji docílit a zda je toto řešení rozumné?
Děkuji předem za odpovědi.

Foowie
Člen | 269
+
0
-

ad 1) Šablona je soubor view vrstvy který presenter použije k vykreslení (html kódu). Layout je předek šablon. (kdyžtak prostuduj dědičnost šablon)

ad 2) Zkoumá templates/PRESENTER/ACTION.latte, templates/PRESENTER.ACTION.latte (PRESENTER je jméno presenteru a ACTION je jméno akce) – viz api

ad 3) Složka app by neměla být veřejně dostupná, takže umísťovat css/obrázky do složky templates není rozumné. Kdyžtak si vytvoř v www složky podle jmen modulů, presenterů a akcí a do nich do dávej

Editoval Foowie (5. 3. 2011 16:08)

cirdaz
Člen | 21
+
0
-

Děkuji… za vysvětlení…

cirdaz
Člen | 21
+
0
-

Dobrý den,
Nechápu podle čeho se generují ty šablony. Je to tam kompletně zmatené…
když si vypíšu seznam šablon které prochází vrstva View
Array
(
[0] ⇒ D:\_!internet\ISHOP/app/AdminModule/templates/Default/@layout.latte
[1] ⇒ D:\_!internet\ISHOP/app/AdminModule/templates/Default.@layout.latte
[2] ⇒ D:\_!internet\ISHOP/app/AdminModule/templates/Default/@layout.phtml
[3] ⇒ D:\_!internet\ISHOP/app/AdminModule/templates/Default.@layout.phtml
[4] ⇒ D:\_!internet\ISHOP/app/AdminModule/templates/@layout.latte
[5] ⇒ D:\_!internet\ISHOP/app/AdminModule/templates/@layout.phtml
[6] ⇒ D:\_!internet\ISHOP/app/templates/@layout.latte
[7] ⇒ D:\_!internet\ISHOP/app/templates/@layout.phtml
)

a když se podívám na Routy
viz
yes Route admin/<presenter>/<action> presenter = Default
action = default
Default:default

Tak proč to bere defaultní šablonu s názvem
Default.default.latte
Když ve výpisu šablon které to prohledává ten název vůbec není?
Děkuji za vysvětlení

Foowie
Člen | 269
+
0
-

Protože zkoumáš seznam layoutů a divíš se, proč mezi nima není cesta k šabloně.

cirdaz
Člen | 21
+
0
-

Foowie napsal(a):

Protože zkoumáš seznam layoutů a divíš se, proč mezi nima není cesta k šabloně.

tak ve složce templates jsou potom šablony nebo layouty?

22
Člen | 1478
+
0
-

layout = šablona

Foowie
Člen | 269
+
0
-

Jelikož layout je rodič od šablony (v rámci dědičnosti šablon), tak je tam obojí ;)
Většinou je @layout.latte layout a default.latte, add.latte, … jsou šablony

cirdaz
Člen | 21
+
0
-

třeba viz dokumentace https://doc.nette.org/…n/presenters#…

tam se šablona plete s layoutem úplně…

cirdaz
Člen | 21
+
0
-

Takže pokud mám ve složce tempaltes

User.default.latte
Page.default.latte
Default.default.latte
Auth.login.latte
Auth.@layout.latte
@layout.latte

Tak layoutem jsou
Auth.@layout.latte
@layout.latte

Jsou tam tyto kódy třeba

<?php
<!DOCTYPE html>
<html lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
	<title>{block #title}nette-acl{/block}</title>
	<link rel="stylesheet" href="{$basePath}/layouts/__admin/default/css/admin.css" type="text/css" media="screen, projection, tv" />
</head>
<body>
<div id="wrapper">

	<div id="header">
		<a id="homelink" n:href="Default:">nette-acl admin</a>

		{if $user->isLoggedIn()}
			<p id="userbox">
				Prihlásený <strong>{$user->getIdentity()->name}</strong> [{= implode(', ', $user->roles)}] | <a n:href="Default:logout">odhlásiť</a>
			</p>
		{/if}
		<div class="clearfix"></div>
	</div><!-- #header -->

	<div id="content">
		<div n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</div>
		{include #content}
	</div><!-- #content -->

	<div id="footer">
		<p>Copyright &copy; 2010 Nette Foundation</p>
	</div><!-- #footer -->

</div><!-- #wrapper -->
</body>
</html>
?>

Kdežto v souborech
User.default.latte
Page.default.latte
Default.default.latte
Auth.login.latte
je pouze a to jsou potomci layoutů tudíž dědí od nich šablonu.

<?php
{block #title}Login :: {include #parent}{/block}

{var robots = noindex}

{block #content}
	<div id="loginForm">
		{control loginForm}
	</div>
?>
bojovyletoun
Člen | 667
+
0
-

obojí. Vyjeď si i seznam šablon a uvidíš, jaké je v tom pravidlo. Případně jde něco najít zde
Podívej se i do Nette\Application\Presenter::formatTemplateFiles()
Je vidět, že:
Máš na výběr zda:

  • používat plochou strukturu s tečkami nebo hiarchickou oddělěnou lomítky
  • také je tam zvlášť volba pro příponu phtml a latte (nové)
  • také je tam deprecated zápis

To je vše. přičemž pro lyout platí, že se nejdřív prohledává layout presenteru, pak layout modulu a pak se jakoby odebírají moduly, až se skončí na templates/@layout.latte.

22
Člen | 1478
+
0
-

můžu vědět, proč v tom hledáš nějakou vědu?
Česky bych řekl, že @layout.latte je hlavní šablona a add.latte je podšblona nějakýho presenteru/pohledu presenteru.

cirdaz
Člen | 21
+
0
-

Díky…

cirdaz
Člen | 21
+
0
-

22 napsal(a):

můžu vědět, proč v tom hledáš nějakou vědu?
Česky bych řekl, že @layout.latte je hlavní šablona a add.latte je podšblona nějakýho presenteru/pohledu presenteru.

Snažím se to pochopit.
a pokud tomu rozumím správně tak
@layout.latte je hlavní layout ne šablona.
kdežto add.latte je šablona která je potomkem layoutu @layout.latte

viz co poslal bojovyletoun o dva příspěvky výše s odkazem na dokumentaci bojovyletoun https://doc.nette.org/…n/presenters#…

Editoval cirdaz (7. 3. 2011 12:12)

Šaman
Člen | 2666
+
0
-

Obojí je technicky (teoreticky) totéž, resp. layout je také šablona, jen má na začátku názvu zavináč (a i to se dá změnit).

Ale z prakticky se osvědčilo mít hlavní šablonu (layout) která je společná pro několik pohledů (často celý modul nebo presenter) a té se tedy říká layout. V ní je html hlavička, a obecná kostra dokumentu. A každý pohled má svoji šablonu která se stará už jen o vykreslení té části, která tomuto pohledu patří. (Např. výpis dat do tabulky.)

Takže v Nette se obecné šablony rozlišují na layout (šablona kostry dokumentu) a šablony (tedy šablona jednoho pohledu). Proto existují i metody pro výpis/nastavení layoutů a šablon samostatně. Všechny jsou ale uložené adresáři /templates (opět se toto dá změnit).

Pro celý presenter můžeš nastavit layout ve startupu presenteru pomocí setLayout(), zatímco setTemplate() využiješ například při ručním generováni mailu.