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: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)
- 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>