Umístění proměnné pro odhlášení v administraci

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

Zdravím,
začínám s Nette a mám modul Admin na administraci. V presenteru Default mám přihlášení uživatele. V šabloně adminu @layout.nette chci mít odkaz pro odhlášení, když je uživatel přihlášen.

Uživatele dokážu přihlásit a odhlásit, ale nevím, kam mám dát nastavení proměnné $isLoggedIn, aby se v šabloně korektně zobrazil odkaz, pokud je uživatel přihlášen.

Nyní to mám metodě renderDefault, ale tím pádem se mi odkaz zobrazí jen v šabloně default. Takhle bych to musel dát do každého presenteru.

<?php
public function renderDefault()
{
	$user = $this->getUser();
	$this->template->isLoggedIn = $user->isLoggedIn();
}
?>

Tady je kód v šabloně @layout.nette:

<div id="menu">
	<a n:ifset="$isLoggedIn" n:href="Default:logout">odhlásit</a>
</div>

Další věc, co mě zajímá je, jak zajistím, když někdo zadá nějakou stránku z administrace, tak aby ho to přesměrovalo na přihlašovací stránku.

A poslední. Když mám stránku pro přihlašování, pak přehled produktů, přidání produktu, editaci, tak musím mít pro každou tuto stránku presenter?

Díky

umrlec
Člen | 56
+
0
-

Proměnnou $isLoggedIn si nemusíš nastavovat. Do každé šablony se ti automaticky předává objekt uživatele v proměnné $user, takže můžeš rovnou psát:

	<a n:if="$user->isLoggedIn()" n:href="Default:logout">odhlásit</a>

Jo a šablony mají koncovku .latte ne .nette :)

K dalšímu bodu… já to dělám tak, že mám třídu BasePresenter (společný předek pro všechny presentery) od toho dědí BaseAdminPresenter (předek pro všechny presentery v admin modulu), ve kterém přepíšu metodu startup() takhle:

	class BaseAdminPresenter extends BasePresenter
	{
		public function startup()
		{
			parent::startup();

			if(!$this->user->isLoggedIn() && $this->presenter->name != 'Admin:Auth')
				$this->redirect('Admin:Auth:default');
		}
	}

Metoda se zavolá na každém presenteru v admin modulu jako první a pokud uživatel není přihlášen a název aktuálního presenteru se nerovná názvu presenteru s přihl. formulářem (V mém případě Admin:Auth), pak je uživatel přesměrován na přihlašovací stránku. Ta druhá podmínka tam musí být, jinak se to zacyklí.

Presenter si udělej jenom pro produkt, nejspíše tedy ProductPresenter a v něm jednotlivé akce např. list (přehled), add (přidání) a edit (úprava).

Editoval umrlec (12. 8. 2011 0:47)

matoni555
Člen | 40
+
0
-

Díky, to je ono, co jsem potřeboval!

umrlec
Člen | 56
+
0
-

Není vůbec zač :)