Šablony v nette začátečník
- cirdaz
- Člen | 21
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
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
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í
- cirdaz
- Člen | 21
třeba viz dokumentace https://doc.nette.org/…n/presenters#…
tam se šablona plete s layoutem úplně…
- cirdaz
- Člen | 21
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 © 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
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.
- cirdaz
- Člen | 21
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
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.