Latte – jiné pozadí na jedné stránce

BuMoRi
Člen | 109
+
0
-

Ahoj, jak se jednoduše řeší pozadí u <body>, pokud je všude stejné, jen na jedné stránce jiné?
v @layout budu mít v místě tagu jen {block body}{/block} a v každé šabloně {block body}<body class="foo1(2)">{/block}?

vladimir.biro
Člen | 163
+
+1
-

BuMoRi napsal(a):

Ahoj, jak se jednoduše řeší pozadí u <body>, pokud je všude stejné, jen na jedné stránce jiné?
v @layout budu mít v místě tagu jen {block body}{/block} a v každé šabloně {block body}<body class="foo1(2)">{/block}?

V sablone tej podstranky, kde chces mat ine pozadie pretaz povodne css novym. Cize by mohlo stacit dopisat:

<style>
	body {
		background-image: url("paper.gif");
	}
</style>

Dufam, ze som tvoju otazku spravne pochopil :)

BuMoRi
Člen | 109
+
0
-

OK, tenhle způsob bude určitě lepší, díky.

GEpic
Člen | 562
+
+4
-

Nejlepší je mít toto celé mimo v externím CSS souboru a poté to řešit pomocí n:class makra na <body>

Ta jiná stránka má určitě vlastní akci, že? Pak stačí:

public function renderAkce1()
{
	$this->template->jinePozadi = true; // <== pri teto akci chci zobrazit jine pozadi
}

a v @layout.latte

	{default $jinePozadi = false} {* false = vychozi stav *}
	<body n:class="$jinePozadi ? 'trida-jineho-pozadi'">

Výhodou je, že si pak můžeš volit kde jaké pozadí zobrazíš a nepotřebuješ vůbec {block body}{/block} a definovat to na každé podstránce zvlášť

Editoval GEpic (9. 11. 2017 10:41)

vladimir.biro
Člen | 163
+
0
-

GEpic napsal(a):

Nejlepší je mít toto celé mimo v externím CSS souboru a poté to řešit pomocí n:class makra na <body>

Ta jiná stránka má určitě vlastní akci, že? Pak stačí:

public function renderAkce1()
{
	$this->template->jinePozadi = true; // <== pri teto akci chci zobrazit jine pozadi
}

a v @layout.latte

	{default $jinePozadi = false} {* false = vychozi stav *}
	<body n:class="$jinePozadi ? 'trida-jineho-pozadi'">

Výhodou je, že si pak můžeš volit kde jaké pozadí zobrazíš a nepotřebuješ vůbec {block body}{/block} a definovat to na každé podstránce zvlášť

Nevim, nejak se mi zda, ze by to nemelo byt v tom pressenteru. Radeji bych misto:

public function renderAkce1()
{
	$this->template->jinePozadi = true; // <== pri teto akci chci zobrazit jine pozadi
}

promennou definoval v sablone podstranky na miste, kde by to jine pozadi melo byt:

	{var $jinePozadi = true}

Ale pouzivat styly v samostatnem css je urcite dobry jako :)

Editoval vladimir.biro (9. 11. 2017 10:57)

BuMoRi
Člen | 109
+
0
-

GEpic napsal(a): …

Tak tohle by mě vůbec nenapadlo, díky moc.

GEpic
Člen | 562
+
0
-

promennou definoval v sablone podstranky na miste, kde by to jine pozadi melo byt:

	{var $jinePozadi = true}

Ale pouzivat styly v samostatnem css je urcite dobry jako :)

@vladimir.biro – tady jde o to že {var $jinePozadi = true / false} budeš muset definovat opět všude (resp. v každé šabloně akce) a protože programátoři po čase zapomínají tak navrhuji blbuvzdorná řešení, než někoho nutit dělat něco navíc.

Každopádně v kombinaci s {default $jinePozadi= true / false} to můžeš klidně řešit tak jak navrhuješ pokud chceš mít presentery čisté. :)

PS: Presenter přece slouží pro předávání dat do šablony / pro šablonu, je to jeho primární účel – toto tam určitě nevadí (navíc můžeš mít jiné pozadí klidně i pro celý presenter a tak to můžeš dát do beforeRender a podobně :)

@BuMoRi nemáš zač.

Editoval GEpic (9. 11. 2017 21:33)

vladimir.biro
Člen | 163
+
0
-

Každopádně v kombinaci s {default $jinePozadi= true / false} to můžeš klidně řešit tak jak navrhuješ pokud chceš mít presentery čisté. :)

Tak presne som to myslel :)

joe
Člen | 313
+
0
-

Úplně nejlepší bude, pokud v BasePresenteru do šablony pošleš informaci o názvu presenteru a názvu akci. Podle toho přidáš třídy na nějaký element. Například to dávám jako modifikátory a mám pak Page--Homepage Page--viewDefault a dokážu tak rozlišit, že jsem na Homepage presenteru a akci default. Můžeš tak pak rozlišit každou akci hned a nemusí programátor nic řešit, pokud budeš chtít měnit pozadí i jinde.

Editoval joe (15. 11. 2017 14:18)

BuMoRi
Člen | 109
+
0
-

@joe Díky, asi budu muset použít jiný řešení než to od GEpic, jelikož těch pozadí tam bude nakonec víc. Nicméně můj skill je zatím na úrovni, kdy jsem z tvého toho moc nepobral :). Ale zkusím to tedy…

  • v BasePresenteru, asi v metodě startup() si uložím informaci o aktuálním presenteru: $this->template->jinePozadi = $this->getName() . ':' . $presenter->getAction() ?
  • pak už se ztrácím… Vyrobím si nějaký vlastní filtr, který v šabloně převede $jinePozadi na potřebnou css třídu?

Tak přinejhorším bych mohl na <body> použít podminky, no…

GEpic
Člen | 562
+
+1
-

@BuMoRi to mé řešení můžeš použít klidně i pro více pozadí, stačí si nepředávat boolean ale přímo string té třídy. :)

joe
Člen | 313
+
+2
-

@BuMoRi Vhodnější bude například metoda beforeRender nebo afterRender.

$this->template->bodyClass = 'Page Page--' . $this->getPureName() . ' Page--view' . ucfirst($this->action);

Metoda getPureName pak vypadá

public function getPureName()
{
    $temp = mb_split(':', $this->name);
    return lcfirst(end($temp));
}

A v šabloně pak jednoduše

<body class="{$bodyClass}">
<!-- Tím se vytvoří třídy například Page Page--homepage Page--viewDefault a díky tomu jsi schopný rozlišit presentery a akce v CSS -->
<style>
.Page--homepage {} /* Presenter Homepage */
.Page--homepage.Page--viewDefault {} /* Presenter Homepage jen na akci default */
.Page--viewDefault {} /* Akce default u všech presenterů */
</style>
BuMoRi
Člen | 109
+
0
-

Všem moc děkuju za pomoc.