Autor | Zpráva | ||
---|---|---|---|
janbarasek Profil |
#1 · Zasláno: 12. 4. 2016, 19:49:47
Ahoj,
dělám novou verzi vyhledávacího webu, kde používám tzv. "Cool URL" za pomoci routerování v Nette. Rád bych měl adresu s výsledky v tomto stylu: doména.cz/search/dotaz Když hledám například dotaz [funkce] , tak URL vypadá takto:
doména.cz/search/funkce Problém nastane v okamžiku, kdy zadám dotaz v tomto stylu: [2+5/3] , pak URL vypadá takto:
doména.cz/search/2%2B5%2F3 2+5 a zbytek ořízne, protože to pro něj je další parametr.
Získání dotazu z vyhledávacího pole, jeho přepis a přesměrování na stránku s výsledky hledání dělám v JavaScriptu, a to takto: $('#search').submit(function(event) { event.preventDefault(); window.location.href = $('base').attr('href')+'search/' + encodeURIComponent($('#q').val()); }); Napadá vás nějaké hezké řešení, jak dostat do adresy i lomítka a další speciální znaky, které může člověk naprosto přirozeně zadat (hlavně na matematickém webu)? Předem děkuji za jakékoli nápady. |
||
CZechBoY Profil |
#2 · Zasláno: 12. 4. 2016, 20:02:33
Ukaz routu. V Nette dokumentaci je tusim i priklad jak do parametru zahrnout i lomitka.
|
||
janbarasek Profil |
#3 · Zasláno: 12. 4. 2016, 20:05:48
CZechBoY:
Pokud vynechám routery, které s ukázkou nesouvisí, tak to vypadá takto: <?php namespace App; use Nette; use Nette\Application\Routers\RouteList; use Nette\Application\Routers\Route; class RouterFactory { /** * @return Nette\Application\IRouter */ public static function createRouter() { $router = new RouteList; // tady mám další routery, které nesouvisejí s problémem $router[] = new Route('search/<query>[/<category>]', 'Search:default'); $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default'); return $router; } } Chci mít URL ve tvaru: doména.cz/search/dotaz A říkám na rovinu, že s Nette začínám a moc routerům nerozumím, takže to je napsané podle mého nejlepšího odhadu. |
||
juriad Profil |
#4 · Zasláno: 12. 4. 2016, 20:23:01
Ale vždyť tím přesně říkáš, že po <query> může následovat <category> oddělená lomítkem. Pokud je lomítko součástí hledaného výrazu bude se považovat za oddělovač kategorie. Máš prostě blbě navrženou strukturu routy searche.
To jak dovolit lomítku být součástí parametru je skutečně v dokumentaci: doc.nette.org/en/2.3/routing#toc-validation-expressions |
||
CZechBoY Profil |
Tak zkus
$router[] = new Route('search/<query .+>'); |
||
janbarasek Profil |
CZechBoY:
Děkuji, tvé řešení funguje například pro: /search/2+3/2 Ale toto už ne: /search/2%2B5%2F3 Druhý příklad vrací chybu: Objekt nenalezen! Požadované URL nebylo na tomto serveru nalezeno. Zdá se, že odkaz na odkazující stránce je chybný nebo zastaralý. Informujte, prosím, autora této stránky o chybě. Pokud si myslíte, že toto je chyba serveru, kontaktujte, prosím, webmastera. Error 404 Nebude to způsobené tím escapováním? Kdybych escapování neprovedl, jak do URL pošlu speciální znaky, které může uživatel hledat? Zatím jsem to vyřešil tak, že jsem v JS přidal tento řádek: window.location.href = $('base').attr('href')+'search/' + encodeURIComponent($('#q').val()).replace('%2F', '/'); Asi to není ideální, ale zatím jsem nenašel příklad, pro který by to nefungovalo. |
||
Časová prodleva: 8 let
|
0