Dědění šablon – include, nebo prázdné blocky?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
+1
-

Mám dvě šablony (mobilní a desktop verzi), vypisují to hlavní stejně, jenom v té desktop jsou navíc nějaké bloky. Ideální tedy na dědění, ale jak jej vůbec správně použít.

1. mít jako hlavní tu šablonu desktopovou a ty bloky co, nebudou mít v {block} a pak mobilní verzi dědit od dektopové s tím, tže ty bloky nadefinuji jako prázdné. Tedy něco takového?

//desktop.latte
{block main}
	tady ten obsah je spolecny
	{block reklama}tahle reklama bude jen na desktopu{/}
{/}

//mobile.latte
{layout desktop.latte}
{block reklama}{/}

2. udělat jako hlavní tu mobilní verzi, v které si připravím include pro bloky co budou v desktop. Tedy něco takového

//mobile.latte
{block main}
	tady ten obsah je spolecny
	{include reklama}
{/}

//desktop.latte
{layout mobile.late}
{block reklama}tady bude reklama pro dektop{/}

Nějak se nejsem schopný rozhodnout úplně, co je správná varianta. Můžete poradit?

Jiří Nápravník
Člen | 710
+
0
-

Nikdo nemá žádný názor?:-)

Lukeluha
Člen | 130
+
0
-

Úplně nevím proč nevyužít tu stejnou šablonu a pomocí CSS frameworků, popř. media queries skrýt/zobrazit potřebné bloky na tom a tom zařízení?

Editoval Lukeluha (20. 8. 2015 22:27)

enumag
Člen | 2118
+
0
-

Asi bych to udělal takhle:

//mobile.latte
{block main}
    tady ten obsah je spolecny
{/block}

//desktop.latte
{layout mobile.latte}
{block main}
	{include parent} // možná je nutné #parent, teď nevím
	tady bude reklama pro dektop
{/block}

Editoval enumag (20. 8. 2015 22:30)

Jiří Nápravník
Člen | 710
+
0
-

Lukeluha napsal(a):

Úplně nevím proč nevyužít tu stejnou šablonu a pomocí CSS frameworků, popř. media queries skrýt/zobrazit potřebné bloky na tom a tom zařízení?

Proč stahovat mobily, celý sidebar – v kterém je třeba 20 obrázků a spousta dalších zbytečností, který pak schovám.

Jiří Nápravník
Člen | 710
+
0
-

@enumag díky za radu, tohle jsem neznal. Ale je to použitelné v případě jednoho bloku, pokud dobře chápu. Těch bloků by takhle bylo více. Sidebar, reklama, případně patička atd. Tak mi jde spíše obecně.

enumag
Člen | 2118
+
0
-

@JiříNápravník Ok trochu to rozvedu:

//mobile.latte
{block main}
    {block sidebar}...{/block}
	{block content}...{/block}
	{block footer}...{/block}
{/block}

//desktop.latte
{layout mobile.latte}
{block main}
    {include sidebar}
	{include content}
	{block reklama}...{/block}
	{include footer}
{/block}
Šaman
Člen | 2635
+
0
-

Názor sice mám, ale zkušenosti s tímhle nikoliv. Vždycky jsem si vystačil s jedinou šablonou a jen se pro mobily některé věci vypustily (a ještě navíc to za mě řeší Bootstrap3).

Pokud jsou ty šablony výrazněji rozdílné (než třeba jen použitím jiného CSS), tak bych asi měl dvě samostatné šablony a obsah bych se snažil dostat do komponent (nebo, v horším případě, do latte bloků uložených v samostatných souborech). Pak máš plnou volnost v tom, jak ty šablony seskládáš (na mobilních mohou být některé důležité bloky výše, než na desktopové šabloně, kde jsou dobře vidět i v sidebaru, nebo v patičce).

Úprava uvnitř komponenty/bloku by tedy šablony neovlivnila a projevila by se na obou. Ale přidání bloku by se muselo provést dvakrát. Ale zase máš pak plnou volnost kam a jestli ho vlastně umístíš.

Jiří Nápravník
Člen | 710
+
0
-

@enumag díky za upřesnění, takhle to někde používám, já spíše myslel to s tim include parent, ze jsem neznal. Nicméně oni ty šablony nejsou zrovna snadné v tomhle, tam je někdy reklama uprostřed contentu, a tak bych musel dělat bloky stylem block contentUp, block contentDown apod. Proto jsem se ptal, jeslti je spíše lepší použí placeholdery s include, nebo definovat prázdná block. Nakonec jsem to udělal spíše tak, že jsem si opodmínkoval v šabloně, kdy je mobilní verze, tak ať to nevykresluji.

@Šaman komponenty se mi k tomuhle moc nehodí, protože je to hodně variabilní