Jak přidat interaktivní menu do layout.latte?
- Allconius
- Člen | 317
Ahoj, mám v default.latte na každé stránce menu:
<?php
<div class="topnav" id="myTopnav">
<a href="{link Homepage:}" title="Odkaz na úvodní stránku">Úvod</a>
<a href="{link Profil:}" title="Odkaz na profil zadavatele">Profil zadavatele</a>
<a href="{link Archiv: 1, 1}" title="Odkaz na archiv">Archiv</a>
<a href="{link Informace: 1, 1}" title="Odkaz na zakázky malého rozsahu">Zakázky malého rozsahu</a>
<a href="{link Zakazky:}" title="Odkaz na zakázky do 50 tis. Kč">Zakázky do 50 tis. Kč</a>
<a href="{link Hledani:}" title="Odkaz na vyhledávání">Vyhledávání</a>
<a href="{link Predpisy:}" class="active" title="Odkaz na předpisy">Předpisy</a>
<a href="javascript:void(0);" class="icon" onclick="myFunction()" title="Odkaz na menu">
<i class="fa fa-bars"></i>
</a>
</div>
?>
je všude stejné jen s tím rozdílem, že pro danou stránku měním class=„active“ atribut. Nedá se dát menu do layout.latte s tím, že bych pak jen do šablony posílal nějaký parametr, pokud se tedy dá z presenteru poslat něco přímo do té hlavní šablony @layout.latte ? Nějak takto:
<?php
<div class="topnav" id="myTopnav">
<a href="{link Homepage:}" class="{m1}" title="Odkaz na úvodní stránku">Úvod</a>
<a href="{link Profil:}" class="{m2}" title="Odkaz na profil zadavatele">Profil zadavatele</a>
<a href="{link Archiv: 1, 1}" class="{m3}" title="Odkaz na archiv">Archiv</a>
<a href="{link Informace: 1, 1}" class="{m4}" title="Odkaz na zakázky malého rozsahu">Zakázky malého rozsahu</a>
<a href="{link Zakazky:}" class="{m5}" title="Odkaz na zakázky do 50 tis. Kč">Zakázky do 50 tis. Kč</a>
<a href="{link Hledani:}" class="{m6}" title="Odkaz na vyhledávání">Vyhledávání</a>
<a href="{link Predpisy:}" class="{m7}" title="Odkaz na předpisy">Předpisy</a>
<a href="javascript:void(0);" class="icon" onclick="myFunction()" title="Odkaz na menu">
<i class="fa fa-bars"></i>
</a>
</div>
?>
a jen si nastavovat ty hodnoty m1-m7 na active ?
- CZechBoY
- Člen | 3608
Abych odpověděl doplňující otázku tak ano dá se poslat parametr do šablony (i @layout.latte nebo jakékoliv jiné):
class MujPresenter extends Presenter
{
public function renderDefault(): void
{
$this->template->m2 = true;
}
}
samozřejmě většinou se tohle (v beforeRender metodě!) dělá v BasePresenteru, který potom dědí všechny ty MujPresenter, TvujPresenter atd.
Editoval CZechBoY (23. 9. 2020 22:28)
- Allconius
- Člen | 317
CZechBoY napsal(a):
Abych odpověděl doplňující otázku tak ano dá se poslat parametr do šablony (i @layout.latte nebo jakékoliv jiné):
class MujPresenter extends Presenter { public function renderDefault(): void { $this->template->m2 = true; } }
samozřejmě většinou se tohle (v beforeRender metodě!) dělá v BasePresenteru, který potom dědí všechny ty MujPresenter, TvujPresenter atd.
Ahoj, a jak udělám aby se to poslalo do té šablony @layout.latte a ne do default.latte ? A ještě dotaz ohledně tisku, mám šablonu tisk.latte určenou pro tisk do PDF. Ale pokud přesunu to menu do @layout.latte tak se mi samozřejmě pak zobrazuje i v tom PDF, dá se nějak udělat aby ta šablona tisk.latte to @layout.latte ignorovala, nebo nastavit jiné @layout.latte jen pro ten tisk.latte ?
- Roman Halaxa
- Člen | 60
Allconius napsal(a):
nebo to mám nějak nastavit přes CSS a v té tisk.latte jen nastavit skrytí menu ?
Dá se to udělat pomocí css.
Příklad:
.topbar, .left-sidebar, .footer, .breadcrumb{
display: none;
}
a potom říct že ten styl chceš použít na tisk
<link media=„print“ href=„{$basePath}/css/print.css“ rel=„stylesheet“ type=„text/css“/>
- Roman Halaxa
- Člen | 60
Allconius napsal(a):
CZechBoY napsal(a):
Abych odpověděl doplňující otázku tak ano dá se poslat parametr do šablony (i @layout.latte nebo jakékoliv jiné):
class MujPresenter extends Presenter { public function renderDefault(): void { $this->template->m2 = true; } }
samozřejmě většinou se tohle (v beforeRender metodě!) dělá v BasePresenteru, který potom dědí všechny ty MujPresenter, TvujPresenter atd.
Ahoj, a jak udělám aby se to poslalo do té šablony @layout.latte a ne do default.latte ? A ještě dotaz ohledně tisku, mám šablonu tisk.latte určenou pro tisk do PDF. Ale pokud přesunu to menu do @layout.latte tak se mi samozřejmě pak zobrazuje i v tom PDF, dá se nějak udělat aby ta šablona tisk.latte to @layout.latte ignorovala, nebo nastavit jiné @layout.latte jen pro ten tisk.latte ?
Když si v base presenteru v beforeRender() předáš parametr příklad
public function beforeRender()
{
$this->template->mujParametr = 1;
}
budeš ho mít i v layoutu
- Allconius
- Člen | 317
Roman Halaxa napsal(a):
Allconius napsal(a):
nebo to mám nějak nastavit přes CSS a v té tisk.latte jen nastavit skrytí menu ?
Dá se to udělat pomocí css.
Příklad:
.topbar, .left-sidebar, .footer, .breadcrumb{
display: none;
}a potom říct že ten styl chceš použít na tisk
<link media=„print“ href=„{$basePath}/css/print.css“ rel=„stylesheet“ type=„text/css“/>
Super díky, vyzkouším to :-)
- Allconius
- Člen | 317
Allconius napsal(a):
MajklNajt napsal(a):
Ak v PDF vôbec nepotrebuješ layout.latte, tak stačí v šablóne tisk.latte použiť makro {layout none}
ok, to je taky dobrý, zkusím díky
Funguje to super, hlavně jsi mi tím vyřešil problém s generováním PDF, já jsem tam totiž posílal celý ten layout.latte včetně všech JS a generovalo se mi to asi minutu a asi rok jsem nemohl pořád přijít na to proč a ti chudáci co to vyplňovali tak u toho usínali :-)) Bez té šablony to trvá asi 2 sec.
- Šaman
- Člen | 2667
Šablony fungují tak, že se konkrétní šablona (třeba
page.latte
) vloží do šablony layoutu (defaultně
@layout.latte
).
Jaký layout se použije (a jestli vůbec) můžeš ovlivnit buď v šabloně
tím makrem {layout xxx}
, nebo v presenteru
$this->setLayout()
.
To, že se použije @layout.latte
je jen defaultně přednastavená
hodnota v Nette.
Takže i pro tisk bys mohl používat layout (jiný, tiskový, který
načítá css pro tisk a třeba nastavuje rozměry stránky apod.). A pak mít
v šabloně {layout @print.latte}
. Anebo layout vypnout úplně,
to se taky používá často pro šablony emailů.
Mimochodem, vnoření může být i vícenásobné, takže i v šabloně
layoutu můžeš mít další {layout @baseLayout.latte}
. Já to
použivám třeb pro přihlašovací obrazovku. Zakladní layout obsahuje
metainformace o webu a vlastně většinu věcí v head
. Ale pak
jsou jiné layouty pro přihlašovací obrazovku a jiné pro běžnou stránku
s menu apod. Takže konkrétní šablony si řeší content, layouty řeší
rozložení společných prvků (menu) a baseLayout metainformace a načítání
společných css a js.
Editoval Šaman (25. 9. 2020 11:44)