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

- vladimir.biro
- Člen | 163
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 :)

- GEpic
- Člen | 566
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
GEpic napsal(a):
Nejlepší je mít toto celé mimo v externím CSS souboru a poté to řešit pomocí
n:classmakra 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)

- GEpic
- Člen | 566
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
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
Ú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
@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…

- joe
- Člen | 313
@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>