Tvorba odkazu v template control(u)

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

Dobrý den,
vytvořil jsem si komponentu, která generuje menu kategorií. Jenže mám problém při tvorbě odkazu na presenter Post akci show s parametrem id. Můžete mi poradit, kde dělám chybu?

CategoriesControl.php

<?php
class CategoriesControl extends Control
{
	private $__categories = NULL;

	public function render()
	{
		$c = $this->categories->findCategories();

		$template = parent::createTemplate();
		$template->setFile(__DIR__ . '/CategoriesControl.phtml');
		$template->categories = $c;

		$template->render();
	}

	public function getCategories()
	{
		if (!isset($this->__categories))
		{
			$this->__categories = new Categories();
		}

		return $this->__categories;
	}
}
?>

CategoriesControl.phtml

<hr class="sidebar-border" />

<h1 class="sidebar">V kategorii</h1>
<ul class="category">
	{foreach $categories as $category}
	<li><a class="link" href="{link Post:show $category->id}">{$category->category}</a></li> {* <-- tady je problém... :( *}
	{/foreach}
</ul>
redhead
Člen | 1313
+
0
-

zkus

{plink Post:show $category->id}

Liší se to pouze v plink místo link (tzn. presenterlink, normální link tvoří adresu na komponentu nikoli na presenter)

Mesiah
Člen | 240
+
0
-

Ooohps, teď mě napadlo, že musím generovat link na presenter pomocí plink, bo nejsem v presenteru…
Takže vyřešeno, omlouvám se, že jsem otravoval s takovou blbostí…

mojeto
Člen | 4
+
0
-

Zdravím pravděpodobně se to zde už řešilo, ale nikde jsem to nenašel.

Jak vytvořím v šabloně odkaz (použitý v hlavním menu) na prezenter a akci bez perzistentních parametrů?

Příklad:
v UserPresenteru mám persistentní parametr $id

<?php
...
/** @persistent int */
   public $id = "";
...
?>

v hlavní šabloně mám menu společné pro všechny pohledy:

<!-- @layout.phtml -->
<div id="menu">
      <h3>Menu</h3>
      <ul>
          <li><a href="{plink User:}">správa uživatelů</a></li>
          <li><a href="{plink User:add}">přidat uživatele</a></li>
      </ul>
  </div>

v šabloně defaultního pohledu mám vygenerovány odkazy na editaci uživatelů pomocí jejich id

<!-- User.default.phtml -->
...
<a href="{plink User:edit id => $userId}">upravit uživatele {$user->name}</a>
...

při přístupu do aplikace na defaultní stránku (User:default) se layoutu vygeneruje odkaz {plink User:} jako ‚localhost/user‘

pokud přejdu na editaci uživatele (User:edit = localhost/user/edit/1) vygeneruje se ten samý odkaz v layoutu {plink User:} jako ‚localhost/user/default/1‘

jak tomu zabráním, a docílím toho aby se v layoutu generoval odkaz bez perzistentích parametrů?

Vím že mohu použít něco jako {plink User: id => ''} ale pokud časem v prezenteru přidám další perzistentní paramter přijde mi divné hledat všechny takové odkazy a přidávat tam nulováni tohoto parametru.

Jde nějak vytvořit odkaz na prezenter a jeho akci bez předání perzistentních parametrů?

Editoval mojeto (14. 8. 2010 16:23)

Patrik Votoček
Člen | 2221
+
0
-

Nastavením persistentního parametru na defaultní hodnotu: {plink User:, id => ""}

mojeto
Člen | 4
+
0
-

ano, přesně to jsem uvedl už v dotazu a ptám se jestli existuje i jiný obecnější postup

Aurielle
Člen | 1281
+
0
-

Zrušit persistentní parametr nebo to, co napsal Vrtak…