Umístění proměnné pro odhlášení v administraci
- matoni555
- Člen | 40
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
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)