Routování – nechci /blog/default/<pageID>

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

Zdravím,

chtěl bych si upravit routy na blogu, ale s tímto si neporadím. Vysvětlení:

mám blog v presenteru Blog, pod ním jede vše, /blog/page/<pageID>, /blog/post/<postID>,…
Chtěl bych aby, když mám defaultní presenter, Intro:default, aby mi blog fungoval tak že hlavní stránka blogu /blog/ by byla „převlečená“ /blog/page/1 ale nechci aby se tam přesměrovával uživatel. Tj Route:ONE_WAY dělat nechci. Zároveň nechci vytvářet 2. template který by byl CTRL+C->CTRL+V – tj.

/templates/Blog/page.latte
/templates/Blog/default.latte

Přijde mi zbytečné mít 2× stejný soubor na jednu a tu samou věc, ale zase nechci url kde když se bude stránkovat dál aby vypadala /blog/default/<pageID>.

Napadlo mě nějak přesměrovávat dotazy z /blog/page/<pageID> na /blog/default/<pageID>, ale to by došlo k přesměrování a změně URL.

Doufám že je to alespoň trochu pochopitelné, díky za případné návrhy řešení :-)

Editoval theacastus (10. 9. 2016 16:14)

Martk
Člen | 661
+
0
-

V routě udělat defaultní page na stránku 1 a když je to výchozí page, tak vykreslovat jen /blog, jestli jsem tě pochopil správně? /blog[/page/<pageId=1>]

Editoval Antik (10. 9. 2016 17:05)

theacastus
Člen | 81
+
0
-

@Antik nene, to jsem vyřešil v presenteru ifem. Jde mi vysloveně o tvar url „/blog/page“ vs „/blog/default“. Stránkování mám zmáknuté.

Jde o to že když otevřu /blog/ spustí se v presenteru metoda renderDefault($id) a k ní přiřazený template default.latte. Když ale přejdu na starší posty pomocí /blog/page/2 spustí se metoda renderPage($id) a použije se template page.latte.

Můj problém je v tom že renderDefault($id) a renderPage($id) dělají naprosto to samé (a mají to dělat), proto mi přijde hloupé mít pro obojí různé metody a templaty.

Není možné někde nastavit třeba v renderPage($id) že se má využít ten a ten template ? Třeba jak se nastavují různé layouty…
Něco jako $this->template->setTemplate('default');

Martk
Člen | 661
+
+1
-

Podstrčení by nepomohlo?

public function renderDefault() {
	$this->forward('page');
}

Layouty se nastavují přes metodu setLayout v presenteru.

Editoval Antik (10. 9. 2016 17:17)

theacastus
Člen | 81
+
0
-

Co jsem teď tak googlil našel jsem setFile(). Což mě zbavilo page.latte, ale stále potřebuji mít obě funkce ctrl+c, ctrl+v.

Jdu vyzkoušet tvůj návrh :-)

Ahá! Tohle jsem hledal celou dobu! Super.

Děkuju moc @Antik :-)