Layout pro dva moduly – Admin a Front

MikKuba
Člen | 76
+
0
-

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ý?

Kori
Člen | 73
+
0
-

Mas spravne namespace v presenterech?

Mas spravne nastavene routy?

Mas spravne nastaveny presenter mappings v configu?

Nemas nekde pretizenou metodu Presenter::formatLayoutTemplateFiles()?

Pac by to melo fungovat out of box…

Editoval Kori (10. 11. 2017 23:32)

vladimir.biro
Člen | 163
+
0
-

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
–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ý?

Skus sem skopirovat, ako vypada obsah RouterFactory
Tym sa pohneme dalej :)

MikKuba
Člen | 76
+
0
-

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 | 562
+
+2
-

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 | 76
+
0
-

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
+
+2
-

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
+
+3
-

Komplet vsechno najdes tady https://github.com/…odules-Usage

Staci nastavit spravne routy / presenter mappings a bude ti fungovat automaticky, nemusis nic pretezovat.