Symbol „Otazník“ v definici routy

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

Ahoj,

snažím se mít routy definovatelné z administrace a to co nejvíce variabilně (přání zákazníka). Vše by bylo fajn – můžu krásně zapisovat routy, které se pak přeloží do výrazu pro nette routy, např.:

/clanky/<kategorie>/<clanek_id>

Problém ale je, když zákazník chce mít např.

/clanky/index.php?cat_id=<kategorie>

  • Nette url parsuje pouze po otazník. Jde tahle funkcionalita nějak pozměnit?
Pavel Kouřil
Člen | 128
+
0
-

Věci za otazníkem parsuje Nette jako query parametry (přístupné přes $presenter->getParam('nazev')) … tzn. by šlo mít routu např. /<presenter>/index.php a přistupovat v presenteru k parametrům přes zmíněné getParam … nebo možná i předávat $cat_id jako argument metodě action/render.

knyttl
Člen | 196
+
0
-

No, toho jsem si právěže vědom. Pokud ale v administraci chci zadávat url, tak jak jsem zmínil výše, tedy:

/clanky/index.php?cat_id=<kategorie>

Tak předpokládám, že tu funkcionalitu musím změnit. Něco podědit a „vyprasit“ :-)

Pavel Kouřil
Člen | 128
+
0
-

Právěže nemusíš? Zkus udělat odkaz na Admin:Category:edit, cat_id => $category->id, např. … funkčnost by to ovlivnit nijak nemělo (teda doufám :)), jen to bude vypadat hnusně.

knyttl
Člen | 196
+
0
-

No, tak to bohužel udělat nemůžu – ten zákazník tam má prostě input ve formuláři a do něja zadává formu toho url, přesně takhle:

/clanky/index.php?cat_id=<kategorie>
nebo
/clanky/<kategorie>/<clanek_id>

a to pak s nějakými drobnými úpravami předávám jakože

<?php
$url = '/clanky/index.php?cat_id=<kategorie>';
...
$route[] = $route = new Route($url, array(...));
?>
Pavel Kouřil
Člen | 128
+
0
-

Routy:

$router[] = new Route('/clanky/index.php', array(...));
$router[] = new Route('/clanky/<kategorieId>/<clanekId>', array(...));

A při zpracování formuláře to poslat jako

$presenter->redirect('Module:Presenter:action', array('cat_id' => $categoryId));` ?

V presenteru to pak odchytneš jako např.

class AbcPresenter extends Presenter
{
	public function renderDefault($cat_id) { ... }
}

Nebo se akorát nechápeme, čeho přesně chceš docílit? Nebo nějaká část aplikace na Nette neběží? Každopádně tak jako tak ten query parametr součást routy být nemusí.

knyttl
Člen | 196
+
0
-

Zákazník má adminsitraci, kde si může pro různé části veřejné částě definovat různá URL. A to dělá tím, že je vyplňuje prostě ve formuláři v nějakém tvaru. Jde o to, že mu potřebuju dovolit, aby tam mohl napsat i otazníky.

To, co popisuješ mi není neznámé, ale neumožňuje mi to tu flexibilitu.

Editoval knyttl (25. 10. 2011 21:03)

djdaca
Člen | 21
+
0
-

Zdravím,

Já mam trochu jiný problém, máme stránku kde detail se nachází na „domena.cz?12345“ – chtěl bych aby detail byl v Detail:default ale zároveň aby fungovala homepage na Homepage:default

Neví prosím někdo jak ?
Děkuji za odpověď

Etch
Člen | 403
+
0
-

djdaca napsal(a):

Zdravím,

Já mam trochu jiný problém, máme stránku kde detail se nachází na „domena.cz?12345“ – chtěl bych aby detail byl v Detail:default ale zároveň aby fungovala homepage na Homepage:default

Neví prosím někdo jak ?
Děkuji za odpověď

Udělat si pro Homepage vlastní „speciální“ routu?

Filip Procházka
Moderator | 4668
+
0
-

Nette zahazuje takové parametry, musí tam být

domena.cz?12345=