Layout pro dva moduly – Admin a Front
- MikKuba
- Člen | 83
Ahoj.
Asi jsem úplně nepochopil vysvětlení z jiných (starších) vláken, nicméně:
Předělávám webovou aplikaci na Nette. Mám strukturu:
app/
–Admin
–Front
…
–presenters
–router
–templates
Chtěl bych, aby se mi pro modul Front ukazoval jeden @layout.latte umístěný v app/Front/templates/@layout.latte a pro Admin zase jiný umístěný v app/Admin/templates/@layout.latte.
Další struktura je poměrně základní, v modulech už mám nějaké funkce atd, jen se mi to nepřepíná jak chci, vlastně teď to pouští bílou stránku, jelikož jsem z app/templates odstranil @layout.latte
Jak nejsnáze budu volat dané layouty? Z hlavní routy volat routy pro dané moduly nebo to není potřeba? Nechat jen hlavní routu a tam volat do daného modulu presenter nějaký?
- vladimir.biro
- Člen | 163
MikKuba napsal(a):
Ahoj.
Asi jsem úplně nepochopil vysvětlení z jiných (starších) vláken, nicméně:
Předělávám webovou aplikaci na Nette. Mám strukturu:
app/
–Admin
–Front
…
–presenters
–router
–templatesChtěl bych, aby se mi pro modul Front ukazoval jeden @layout.latte umístěný v app/Front/templates/@layout.latte a pro Admin zase jiný umístěný v app/Admin/templates/@layout.latte.
Další struktura je poměrně základní, v modulech už mám nějaké funkce atd, jen se mi to nepřepíná jak chci, vlastně teď to pouští bílou stránku, jelikož jsem z app/templates odstranil @layout.latte
Jak nejsnáze budu volat dané layouty? Z hlavní routy volat routy pro dané moduly nebo to není potřeba? Nechat jen hlavní routu a tam volat do daného modulu presenter nějaký?
Skus sem skopirovat, ako vypada obsah RouterFactory
Tym sa pohneme dalej :)
- MikKuba
- Člen | 83
Díky za reakce, po delší prodlevě snad přidám víc info a posuneme se :)
Router vypadá takto:
public static function createRouter()
{
$router = new RouteList();
$router[] = new Route('kontakt/', 'Core:Contact:default');
$router[] = new Route('<action>/', array(
'presenter' => 'Core:Administration',
'action' => array(
// řetězec v URL => akce presenteru
Route::FILTER_TABLE => array(
'administrace' => 'default',
'prihlaseni' => 'login',
'odhlasit' => 'logout',
'registrace' => 'register'
),
Route::FILTER_STRICT => true
)
));
$router[] = new Route('[<action>/][<url>]', array(
'presenter' => 'Core:Article',
'action' => array(
Route::VALUE => 'default',
Route::FILTER_TABLE => array(
// řetězec v URL => akce presenteru
'seznam-clanku' => 'list',
'editor' => 'editor',
'odstranit' => 'remove'
),
Route::FILTER_STRICT => true
),
'url' => null,
));
$router[] = new Route('[<url>]', 'Core:Article:default');
return $router;
}
Ještě to není finální, nicméně chtěl bych to mít jak jsem psal výše – aby se mi frontend webu vypisoval ze složky Front, tedy když někdo půjde na mojedomena.cz tak uvidí layout pro front, budou se mu tam vypisovat články atd.. A Pokud zadám třeba mojedomena.cz/admin tak aby mě to pustilo administraci a tam abych procházel dané podsekce třeba s url ve tvaru domena.cz/admin/clanky/edit/id/12345 atd..
Jako vodítko jsem chtěl použít tento článek a prezentovaný router (http://www.egoblog.cz/…nimi-moduly/) ale myslím, že mi ještě chybí v daných modulech aplikace nějaký router, že? Ten mám zatím jen jeden a to v hlavní složce v /router..
Díky předem :)
- GEpic
- Člen | 566
Ty sháníš funkci formatLayoutTemplateFiles() (kterou si přetížíš ve svém presenteru) a router ti stačí dopravy jen jeden (ten sem vůbec netahej). :)
public function formatLayoutTemplateFiles()
{
$layouts = parent::formatLayoutTemplateFiles();
$layouts[] = __DIR__ . "/templates/@layout.latte";
return $layouts;
}
Editoval GEpic (19. 11. 2017 0:02)
- MikKuba
- Člen | 83
GEpic napsal(a):
Ty sháníš funkci formatLayoutTemplateFiles() (kterou si přetížíš ve svém presenteru) a router ti stačí dopravy jen jeden (ten sem vůbec netahej). :)
public function formatLayoutTemplateFiles() { $layouts = parent::formatLayoutTemplateFiles(); $layouts[] = __DIR__ . "/templates/@layout.latte"; return $layouts; }
No a to je nejspíš to, co právě přesně nechápu. Router teda nebudu nijak zatím moc upravovat, jen teda někde ve složce Admin v presenteru budu volat tuto funkci? Nebo na ni volat už z Routeru? Tak nějak tu logiku Nette chápu, něco už jsem dělal, ale nezačínal jsem celý projekt komplet od začátku, tak se trochu ztrácím v tom routování. Budu rád za nějaký trochu podrobnější návod, kam tohle ideálně vložit na základě mé struktury. Díky moc a omlouvám se za natvrdlost :(
- BigCharlie
- Člen | 283
Otázka dědičnosti.
Když se podíváš na ten odkaz od @GEpic, vidíš, že funkce patří do Nette presenteru – co dělá? Říká presenteru, kde se hledá šablona s layoutem (viz kód).
kterou si přetížíš ve svém presenteru
znamená, že ty zřejmě někde budeš mít nějaký
BasePresenter
, v kterém si přepíšeš a podle potřeby
upravíš tuhle funkci, aby hledala šablony layoutu tam, kde potřebuješ.
Tenhle basePresenter bude dědit z Nette presenteru a tvoje presentery budou
dědit z něj.
Funkci si Nette zavolá samo v tu správnou chvíli.
Routování říká, jaký presenter „obslouží“ kterou URL adresu. Tj. router o šablonách, layoutech apod. netuší vůbec nic…
- Kori
- Člen | 73
Komplet vsechno najdes tady https://github.com/…odules-Usage
Staci nastavit spravne routy / presenter mappings a bude ti fungovat automaticky, nemusis nic pretezovat.