Latte block a CSS? Jde to nějak?

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

Jak donutit latte šablonu vypnout (i opět zapnout) latte formátování, pokud chci mít v bloku pouze CSS? V @layout.latte mám něco v tomto stylu <style type="text/css">{block style}{/block}</style>. Problém je, že potom v jednotlivých šablonách (view) nemůžu vypnout latte syntax, resp. můžu {syntax off}, ale jde potom nějak zapnout, abych zachovával DRY? Děkuji.

kravčo
Člen | 721
+
0
-

Vyriešené v inom vlákne: https://forum.nette.org/…ema-parsovat

<style type="text/css" n:syntax="off">
    /* ... */
</style>
Newbiek
Člen | 12
+
0
-

Otázka zněla, zda-li to jde nějak, abych zachovával DRY! To znamená, abych v každym tom bloku neopakoval stejný kód, což tady musím vždy použít <style type="text/css" n:syntax="off"> v šabloně viewu, místo toho abych to použil jednou v @layout.latte.

kravčo
Člen | 721
+
0
-

Viem ako znela otázka (a výkričník som si odpustil).

Ak raz latte syntax vypneš, zapnúť naspäť nejde (keďže zapnúť sa dá len pomocou latte syntaxe…).
Teda ak v čo i len jednom style-bloku niektorého view latte syntax potrebuješ, nemôžeš ju vypnúť pre všetky.

Opakovaniu sa nevyhneš, pretože potrebuješ vo view definovať, či style má alebo nemá používať latte syntax.

Akože DRY riešenie problému by mohlo vyzerať takto, ale stavím sa, že skončí výnimkou: LatteException: Undefined block ‚style‘…

@layout.latte

<head>
	{block _style}{/block}
</head>

@plain_style.latte

{layout @layout.latte}
<style type="text/css" n:syntax="off">
	{block style}{/block}
</style>

@latte_style.latte

{layout @layout.latte}
<style type="text/css">
	{block style}{/block}
</style>

Default.default.latte

{layout @plain_style.latte}

{block style}
	body{background:white};
{/block}

Teoreticky by mohol fungovať takýto spôsob, block style musí byť uvedený ako posledný v šablóne:

{* ... *}

{block style}
{syntax off}
	{background:white}

O čosi krajšie by bolo, ak by to fungovalo takto:

{block style; syntax=off}
	body{background:white}
{/block}
Newbiek
Člen | 12
+
0
-

Díky, stačila odpověď nejde, sice je to zklamání, ale těch ještě bude. :-D Ten způsob je zajímavý (jestli jsem to pochopil, tak něco na způsob přetížení šablon), bohužel nefunguje (samozřejmě děkuji za ochotu). Pěknější by bylo opravdu {block style; syntax=off} nebo {syntax css}. Díky.

EDIT: Vytvářet pro každý view zvláštní .css soubor je hodně nepraktické. Je normální mít globální style.css pro layout stránky a základní vzhled, a pro nadefinování jedinečných věcí, které se nikde jinde nevyužijou je lepší nadefinovat přímo v daném viewu.

Editoval Newbiek (24. 7. 2011 0:29)

joe
Člen | 313
+
0
-

(asi trochu OT, ale k čemu je dobré mít CSS v šablonách, patří do CSS souboru)

kravčo
Člen | 721
+
0
-

A ten spôsob bez koncového tagu {/block} nefunguje?

hAssassin
Člen | 293
+
0
-

pripojuju se OT dotazu od joe a jeste dodam dalsi OT dotaz: proc potrebujes vypinat Latte v CSSku? tam snad zadny latte pouzivat nebudes, ne? a kdyz uz jo, tak staci mezi slozenou zavorkou a prvnim znakem dat mezeru a jako latte znacka se to pak neinterpretuje (nebo to uz nefunguje?).

Aurielle
Člen | 1281
+
0
-

hAssassin: funguje.

Newbiek
Člen | 12
+
0
-

Odpověď na OT je v EDITu minulého postu. To s tou mezerou je pěkné, určitě vyzkouším. Rozhodně by stálo za to pořešit tu syntax pro CSS, aby se to nemuselo dělat jedním způsobem, přece jen každý má jiný programming style.

Ten způsob bez koncového {/block} bohužel nefunguje. Hlásí to parse error, resp. že nemám ukončené všechny bloky při použití {syntax off}

Výsledek: Ano způsob s použitím body { background: black; } funguje. Takže stačí za složenou závorkou tedy vynechat mezeru. Díky moc lidičky za rady.

22
Člen | 1478
+
0
-

Newbiek napsal(a):

EDIT: Vytvářet pro každý view zvláštní .css soubor je hodně nepraktické. Je normální mít globální style.css pro layout stránky a základní vzhled, a pro nadefinování jedinečných věcí, které se nikde jinde nevyužijou je lepší nadefinovat přímo v daném viewu.

.. proč by jsi měl mít pro každé view jiné CSS? Pokud potřebuješ něco přimo v HTML tak atribut style by ti měl stačit.

Newbiek
Člen | 12
+
0
-

22: atribut style není sémanticky nejvhodnější, což není ani <style> ale je to menší zlo. Pro každé view nechci jiný layout (styl stránky), ale každý view se v něčem liší, nejsou všechny stejné (důvod? to co si řekne zákazník, je mým rozkazem a pokud si přeje mít různé stylování na různých stránkách, ale stejný layout, tak mu nebudu bránit). A používat třeba 30× style a v něm definovat jak má vypadat daný prvek je opravdu nepraktické. (Příklad z reality: jsou lidé, kteří mají všechny zdi bílé a jsou lidé, kteří mají každou zeď jinak barevnou)

hAssassin
Člen | 293
+
0
-

@Newbiek > no tohle bych resil dvema zpusoby:

  1. bud bych vsechny styly (i ty unikatni) narval do jednoho CSS soubor, ktery bych linkoval pro kazdou stranku v layout.latte. ano je to mozna prasarna, ale urcite tech jedinecnejch stylu nebude tolik aby se ten CSS soubor natolik zvetsil ze by brzdil nacitani stranky (kor kdyz se pak minifikuje/minimalizuje nebo jak se to rekne).
  2. pro kazdy view mit spesl CSS soubor + jeden hlavni pro cely layout a opakujici se veci a pak pomoci addonu pro nacitani externich souboru (nebo vlastni komponenty) natahnul vsechny potrebny stylopisy pro dany view, spojil je do jednoho, minifikoval a ulozil jako temp CSS, ktery by se vy vysledku vzdycky nacital na dany strance. Tohle je uz celkem idealni reseni…

EDIT: Davat atribut style do tagu nebo pouzivat tag <STYLE> se mi vubec nelibi… :-)

Editoval hAssassin (25. 7. 2011 0:13)

joe
Člen | 313
+
0
-

@Newbiek:
Měl bys najít vhodnější způsob, protože na to jdeš celkem špatně. Z několika důvodů je lepší mít vše v jednom CSS souboru:

  • cachuje se
  • snadná úprava, CSS je tam, kde má být

… a možná by se našly i další.

To, že je stejný layout a vnitřky se na nějakých stránkách mění, to je celkem běžná věc. Není nic špatného na tom mít v CSS souboru i věci, které se na nějakou konkrétní stránku nepoužijí.

Pokud bys měl například stránku s hrama a měly by být nějak odlišené kategorie, v praxi se to dělá tak, že třeba elementu body přiřadíš id a třeba class

v logických hrách pak bude třeba <body id="logicGames">
ve sportovních hrách <body id="sportGames">

a to je dostatečný k tomu, abys to v CSS rozlišil. Není potřeba dávat CSS do šablon, spíš je zapotřebí naučit se CSS :-)

22
Člen | 1478
+
0
-

@joe: líp bych to nenapsal +1