headerbanner

Nette - statické stránky s jednoúrovňovými odkazy

Návod na vytvoření statických stránek pomocí Nette používá pro každou stránku zvláštní presenter. Je tedy nutné s každou stranou přidat dva soubory, šablonu .latte a soubor presenteru. To je nevýhoda, výhodou je naproti tomu tvar URL www.example.com/nazev_akce, tedy bez jména presenteru. Je to právě důsledek existence presenterů pro každou stranu - při akci "default" se jméno presenteru do URL nepřenáší. A protože je každá strana generována jako defaultní akce specifického presenteru, je URL "krátká".

Videonávod sice používá jediný presenter, ale generuje odkazy ve tvaru www.example.com/jmeno_presenteru/nazev_akce. Takové chování je třeba u pětistránkového statického webu nepříjemné a adresy mají zbytečně jednu úroveň navíc.

Pro zachování jednoduché adresy a přitom výhodného vytváření jediného souboru pro každou stranu stačí upravit routování.
V souboru bootstrap.php je třeba změnit druhý řádek s $container->router[]:

$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('<action>', 'Homepage:default');

Původní <presenter>/<action>  ve druhém řádku definovalo právě onu dvojúrovňovou adresu, nynější <action> generuje adresu žádoucí. V URL tak budou pouze názvy akcí, tedy jména příslušných šablon. V adresáři app/presenters bude pouze jediný presenter na "obsahovou" stránku HomepagePresenter.php, dále třeba presentery pro chyby atd. Novou stranu pak vytvoříme jen přidáním šablony a úpravou menu v @layout.latte.

Dejme tomu, že web má dvě stránky. Pak v adresáři templates/Homepage jsou šablony default.latte (s obsahem vstupní strany webu) a druha.latte. V menu (v šabloně @layout.latte) se pak na první a druhou stranu odkazuje třeba takto:

<ul>
<li><a n:href="default" >Home</a></li>
<li><a n:href="druha" >Druhá</a></li>
</ul>