{linkBase} přináší konzistenci do odkazování
Jednou z nejcennějších vlastností Nette Application je flexibilní
adresářová struktura, která se plynule přizpůsobuje rostoucím
potřebám projektu. Představte si, že vytváříte e-shop. Začnete
s frontendem a administrací, každý má své presentery. Postupně se ale
aplikace rozrůstá – třeba původně jednoduchý
OrderPresenter
se časem promění v celý modul objednávek
s presentery OrderDetail
, OrderEdit
,
OrderDispatch
a dalšími. Díky flexibilní struktuře tuto
reorganizaci uděláte velmi snadno a elegantně.

Právě tato flexibilita ale může přinést jednu vývojářskou výzvu: co když jeden layout začnou najednou používat presentery, které jsou „různě hluboko“ v adresářové struktuře?
Například máme @layout.latte
pro administraci, ve kterém
chceme mít navigaci s odkazy na různé sekce:
<nav>
<a n:href="Dashboard:">Dashboard</a>
<a n:href="Products:Overview:">Produkty</a>
<a n:href="Users:list">Uživatelé</a>
</nav>
Když tento layout použije presenter Admin:Dashboard
, odkazy
povedou správně na Admin:Dashboard:default
,
Admin:Users:list
atd. Ale co když stejný layout použije
presenter Admin:Products:Detail
? Relativní odkazy se najednou
budou odvíjet od něj a povedou na neexistující cíle (např.
Admin:Products:Dashboard:default
).
Dosud se to řešilo psaním všech odkazů absolutně (případně používání aliasů):
{* Všechno absolutně *}
<nav>
<a n:href=":Admin:Dashboard:">Dashboard</a>
<a n:href=":Admin:Products:Overview:">Produkty</a>
<a n:href=":Admin:Users:list">Uživatelé</a>
</nav>
Funguje to, ale má to své nevýhody. Zejména pokud se později rozhodnete modul přesunout jinam nebo přejmenovat.
Řešením je {linkBase}
Nette Application 3.2.7 přináší elegantní řešení v podobě nové
Latte značky {linkBase}
. Definuje základ, od kterého se budou
odvíjet všechny relativní odkazy v šabloně.
{linkBase Admin}
<nav>
<a n:href="Dashboard:">Dashboard</a>
<a n:href="Products:Overview:">Produkty</a>
<a n:href="Users:list">Uživatelé</a>
</nav>
Teď už je úplně jedno, odkud layout voláte. Všechny relativní odkazy
se budou odvíjet od Admin
modulu:
Dashboard:
→Admin:Dashboard:default
Products:Overview:
→Admin:Products:Overview:default
Users:list
→Admin:Users:list
{linkBase}
ovlivňuje pouze relativní odkazy – ty, které
nezačínají dvojtečkou. Absolutní odkazy (:Admin:Dashboard
) a
odkazy na aktuální presenter (this
, show
)
zůstávají beze změny.
Značka platí pro celou šablonu a funguje se všemi způsoby vytváření
odkazů: {link}
, {plink}
, n:href
.
Bonus: filtr |absoluteUrl
Nette Application 3.2.7 přináší ještě jeden užitečný doplněk –
Latte filtr |absoluteUrl
. Ten normalizuje URL do absolutní podoby,
což se hodí tam, kde potřebujete zaručeně absolutní adresu:
<meta property="og:image" content={$imagePath|absoluteUrl}>
Aktualizujte na Nette Application 3.2.7 a napište, jak se vám novinky líbí.
Chcete-li odeslat komentář, přihlaste se