Jak efektivně vykreslit několik druhů menu?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
marrythenight
Člen | 2
+
0
-

Ahoj,
jsem naprostý začátečník a narazila jsem na problém, který se týká vykreslení 3 typů menu v projektu.
Na hlavní stránce @layout.latte mám definované jedno menu, kde v odkazech je
<li>#services">Services</a></li>
<li>#contact">Contact</a></li>

protože se jedná o one-page stránku, kdy to uživatele dostane na danou sekci. Jenže text v té sekci je zkrácený a já tam mám odkaz pro kliknutí na více informací. No a na těch dalších stránkách bych už potřebovala právě menu, kde odkaz bude: <li><a href=„{$presenter->link(‚Info:service‘)}“>Services</a></li>

No a poslední problém je vykreslení menu v případě přihlášení do svého profilu. Tam to menu má taky jiné už odkazy pro správu svého profilu.
No doufám, že jsem to nějak srozumitelně napsala, ale opravdu si s tím nevím rady. Nechci ten kód neustále kopírovat. Nelze udělat v @layout.latte něco jako {if (dané presentry) } kod menu {/if} nebo to musím dát do různých bloků a ty vkládat nebo includovat soubor pouze s menu??
Neřešil někdo už taky něco podobného s vykreslením několika druhů menu? Moc bych Vám byla vděčná za odpověď. :))

Altimit
Člen | 82
+
+2
-

pokud myslíš, že chceš jiné odkazy v default home page a jiné na ostatních tak to máš nějak tak:

<ul class="menu">
	<li>{ifCurrent :Front:Home:default}<a href="#Services">Services</a>{else}<a n:href=":Front:Info:service">Services</a>{/if}
</li>

a u uživatele to je takhle:

{if $user->loggedIn}
    <li><a n:href=":Client:Home:default">Uživatel</a></li>
    <li><a n:href=":Demofront:Sign:out">Odhlásit se</a></li>
{else}
    <li><a n:href=":Demofront:Sign:up">Registrace</a></li>
    <li><a n:href=":Demofront:Sign:in">Přihlášení</a></li>
{/if}

další věc můžeš si to udělat v zvlášť souboru např. menu.latte, který bude u @layout.latte a v layoutu budeš mít místo toho menu jenom toto:

{include 'menu.latte'}

a celé menu budeš dělat v menu.latte :)

Landsman
Člen | 152
+
0
-

Kód můžeš podmínkovat i na danný presenter / action / modul:

presenter:

$presenter = explode(":", $this->getName());

if(count($presenter) == 2)
{
    $this->template->actionName = strtolower($presenter[1] . "_" . $this->getAction());
    $this->template->moduleName = strtolower($presenter[0]);
}
else
{
    $this->template->moduleName = null;
    $this->template->actionName = null;
}

latte:

{if $actionName == "mojeAkce"}
...
{/if}

Těch způsobů je více.