Vytvoření menu z pole s vlastní proměnnou v odkazu

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

Zdravím, pokouším se udělat takové malé fórum (nebude nikde na ostro, je to spíš takové seznámení s nette) a abych nemusel psát všechny odkazy, tak sem to chtěl vytvořit pomocí pole a foreach. To by mi celkem šlo, ale mám problém dostat do url další parametr.

Mám to zatím tak:

BasePresenter:

public function beforeRender() {
// menu pro diskuzi
        $this->template->menuBook = array(
            'PHP' => 'Book:php', // potřeboval bych z toho nějak udělat Book: set=>php
            'CSS' => 'Book:css', //...
            'HTML' => 'Book:html',
            'Mimo téma' => 'Book:ot',
        );
//...

Šablona:

<ul n:inner-foreach="$menuBook as $item => $link">
    <li><a n:href="$item">{$item}</a></li>
</ul>

Tohle mi vygeneruje odkazy : ?action=php&presenter=Book

Já bych ale chtěl aby místo toho actionu byla nějaká moje proměnná třeba ?set=php&presenter=Book
Jinak používám SimpleRouter, jestli to s tím nějak souvisí…
Možná je to celé špatně, ale nějak se začít musí… :)
Poradí někdo? Díky :)

pawouk
Člen | 172
+
0
-

Moc rad bych ti poradil, ale fakt nechapu o co ti jde. Kazdopadne bych se moc nesoustredil na to co je v url (to resi nette), to muzes kdykoliv zmenit pomoci slozitejsich rout, takze spis popis problem z hlediska co to ma delat. Jinak kazdy odkaz musi vzdy odkazovat na presenter + akci, tato dvojice je proste nutna pro spravne fungovani.

hAssassin
Člen | 293
+
0
-

ja to asi celkem chapu, ale tam je problem ten, ze ty mas v retezci (v poli) ulozeny cely n:href atribut a to nejen Presenter:action ale i s parametry a to si nejsem jisty jestli jde. Jako ze mas:

Presenter:

public function beforeRender() {
	$this->template->foo = "Presenter:action foo => bar";
}

Sablona:

<a n:href="$foo">Foo</a>

Mozna bych to zkusil pres makro {link}, ale nevim:

<a href="{link $foo}">Foo</a>

EDIT: moment, ted sem si vsimnul, ze to tam mas blbe, vzdyt ty v tom foreach vypisujes dvakrat $item a to jak v n:href tak i uvnitr tagu A. Cili ono ti to do href vypise PHP apod. Neni nahodou v tom zakopany pes, nebo ses jen cabnul pri prepisovani?

Editoval hAssassin (6. 1. 2012 1:10)

Tomáš Votruba
Moderator | 1114
+
0
-

Pokud potřebuješ vypsat odkazy na jednotlivé kategorie, jdeš na to celkem dobře. action místo php neřeš, usnadní ti to pochopení zbytku Nette.

Takto vypadá čistá cesta – presenter:

public function beforeRender() {
	// kategorie
        $this->template->categories = array(
            'php' => 'PHP', // obvykle $key => $value
            'css' => 'CSS',
            'html' => 'HTML',
            'ot' => 'Mimo téma'
        );

	// ...
}

Šablona:

<ul n:inner-foreach="$categories as $key => $value">
	<li><a n:href="Book:default set => $key">{$value}</a></li>
</ul>

Výsledné html:

<ul>
	<li><a href="book/?set=php">PHP</a></li>
	...
</ul>

Jinak vřele doporučuji složku examples přímo v distribuci https://github.com/nette/examples

Rellik
Člen | 104
+
0
-

hAssassin: jo v te sablone je preklep. Ma tam byt $link v tom odkazu

Schmutzka: Diky to vypada slibne. Jak dojdu dom tak to hned zkusim :-)