Jak na vice volitelnych sablon?

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

Ahoj,

chci se Vas zeptat, jak by se resilo to, kdybych chtel mit na webu vice sablon (vzhledu) a vzdy pouzivat jen jeden.

Ma predstava byla asi takova, ze bych mel takovouto strukturu:

app/templates/XXX/jednotlive_salobny.latte

Kde by misto XXX byl vzdy nazev nejake sablony (pro pochopeni napr: default, blue_web, red_web…) Vzhledem k tomu, ze by jednotlive vzhledy mely ruzne usporadani html, tak by nebylo mozne nacitat jen jine styly..

Jak takovyto problem resit? Nebo spise, kde definovat, ze sablony se nemaji nacitat z

app/templates/sablona.latte

ale z:

app/templates/AKTUALNI_VZHLED/sablona.latte

Dekuji za tipy.

Tom

hAssassin
Člen | 293
+
0
-

@tomasnikl > resil bych to asi tak, ze nekde v BasePresenter::startup() bych si zjistil to tvoje XXX a pak si prepsal metody formatLayoutTemplateFiles() a formatTemplateFiles() v BasePresenteru, ktere by zohlednovaly aktualne nastavenou promennou XXX.

tomasnikl
Člen | 137
+
0
-

to zjisteni defaultniho vzhledu (XXX) budu resit v basepresenteru, spise mi slo o to, jak pote definovat tu cestu k sablonam.

Diky za info, okouknu zminovane a vyzkousim.

Ted mi jeste doslo, ze vlastne kazdy vzhled muze mit jine styly a jine obrazky. Styly a obrazky ukladam do www/images a www/js, takze jsou vpodstate oddelene od latte sablon.. kdyz tedy budu chtit pouzit jiny vzhled, mel bych udelat jeste neco takoveho:

www/XXX/js/
www/XXX/images/
app/templates/XXX/

idealni by tedy bylo, aby cely vzhled byl v jedne slozce i s obrazky a styly.. ale nevim jestli je vhodne davat obrazky a styly do app/templates/XXX/ a pote je i z teto slozky nacitat na webu.. co myslite? davat styly do www slozky nebo pro zjednoduseni davat styly a obrazky do app/templates/XXX?

hAssassin
Člen | 293
+
0
-

@tomasnikl > no davat styly, skripty (JS) a obrazky do app/ je nesmysl. Protoze, pokud mas vychozi nastaveni, tak ti je to jednoduse nenatahne, jelikoz do vsech slozek krome www/ je pristup pres prohlizec zakazany v .htaccess (a to bych rozhodne nemenil). Spis bych to nechal tak jak mas napsany vyse. Resp bych tu strukturu videl asi takhle:

- app/
	- presenters/
		ErrorPresenter.php
		HomepagePresenter.php
		SignPresenter.php
	- templates/
		- XXX/
			- Homepage/
				default.latte
				blabla.latte
			- Sign/
				in.latte
				out.latte
				lostPassword.latte
			@layout.latte

		- YYY/
			- Homepage/
				default.latte
				blabla.latte
			- Sign/
				in.latte
				out.latte
				lostPassword.latte
			@layout.latte
- www/
	- XXX/
		- css/
		- js/
		- images/
	- YYY/
		- css/
		- js/
		- images/

To XXX/ a YYY/ jsou ty tvoje magicky slozky. K sablonam se dostanes po prepsani tech dvou metod Presenteru jak sem psal vyse.

A jak se dostat k tem souboru do slozky www/ ? Asi bych to udelal tak, ze do sablon se predava promenna $baseUrl a $baseUri (ted nevim jestli obe nebo jen jedna jelikoz se to trochu menilo). Takze bych jednoduse jen upravil tu $baseUrl tak, ze bych k ni pridal nakonec nazev ty XXX slozky a v sablonach pouzival stejne.

Pokud by rozlozeni vlastniho layoutu webu bylo pro vsechny XXX varianty stejny, tak by @layout.latte mohl byt jen jeden primo ve slozce templates/. Ale to uz je na tobe.

smasty
Člen | 90
+
0
-

Predáva sa premenná ‚$baseUrl‘, kvôli spätnej kompatibilite funguje aj $baseUri. Okrem toho by bolo treba ešte zmeniť premennú $basePath, ktorá obsahuje cestu relatívne k root (teda bez ‚http://domena.tld‘).

Ja by som zase skôr odporučil definovať si nejakú vlastnú pemennú, napr. $templatePrefix (niekde v BasePresenter::createTemplate alebo BasePresenter::beforeRender) a používal tú. Pretože $basePath a spol. sa ti zídu aj mimo nahrávania CSS a JS.

class BasePresenter extends Nette\Application\UI\Presenter {
	protected function beforeRender(){
		$this->template->templatePrefix = $this->templateStyle;
	}
}

A v šablóne:

<script src="/{$basePath}/{$templatePrefix}/js/script.js"></script>
hAssassin
Člen | 293
+
0
-

@smasty > ano, na $basePath sem uplne zapomnel :-[ Jinak reseni je vice moznych a kazdy relativne jednoduchy a elegantni, takze to uz je vicemene na nem, jak to udela.