Signál odkazující na určitý action

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

Dobrý večer,
všiml jsem si, při psaní v Nette, že pokud vytvořím odkaz na signál (v mém případě Ajaxové i neAjaxové načtení seznamu položek do dynamického menu), vždy výsledná URL odkazuje na aktuální action dle routeru a přidává do=… Chci dosáhnout chování, kdy nenastane situace, že na webu bude úplně zbytečně více odkazů na stejný obsah. Příklad:

Najedu na projekt/index.php … ten obsahuje v layout.latte menu, které se načítá pomocí ajaxu (když nenjí dostupný, klasicky přes GET). Kliknu tedy na druhou položku a načte se mi URL projekt/?item=2&do=loadMenu1 . Toto chování je v pořádku. Nyní ovšem přejdu v rámci stejného Presenteru na jinou action, například projekt/kluby/ … A tady kliknu v menu na položku třetí, čímž se načte URL projekt/kluby/?item=3&do=loadMenu1. A tady vzniká popsaný problém. Když by šlo jen o AJAXové odkazy, tak to tolik nevadí, ale bohužel nejde.

Zkoušel jsem si různě hrát s Routerem, ale ničeho jsem moc nedosáhl. Představoval bych si chování, kdy po kliknutí na signál se, bez ohledu na aktuální ACTION, načte URL projekt/?item=x&do=loadMenu1, tak jako se to chová, když jsem v rootu.

Děkuji předem za odpovědi. A ano, hledal a zkoušel jsem to několik hodin, než jsem sem napsal :)

JakubJarabica
Gold Partner | 184
+
0
-

A čo tak v beforeRender BasePresenteru(keďže sa po celom webe môže generovať daný signál, resp. v príslušnom predkovi sekcie) testovať toto:

<?php
if($this->getParam('item') !== NULL) {
  $this->template->canonical = $this->link('//this', array('item' => NULL)); // vytvorí kanonickú URL bez item premennej
}
?>

a v hlavičke layoutu:

<?php
<link n:ifset="$canonical" rel="canonical" href="{$canonical}" />
?>

Nebudeš tak mať vo vyhľadávačoch duplicitný obsah. Nie som si istý, či je čistejší spôsob, tento s premennou $canonical úspešne používam napr. pri filtrácii v kategóriach produktov atď.

lukyer
Člen | 33
+
0
-

Použití této meta mě nenapadlo. Rozhodně to je řešení, ale otázka je, které vyhledávače tuto hlavičku používají (ano, google, ten nejdůležitější, ano).

Každopádně jsme si asi úplně nerozuměli, parametr ITEM je v pořádku, jde o to, aby se negenerovaly odkazy typu:

projekt/zobrazA/?item=x&do=loadMenu1

projekt/zobrazB/?item=x&do=loadMenu1

projekt/kontakt/?item=x&do=loadMenu1

když stačí /a všechny tyto URL stejně zobrazí/

projekt/?item=x&do=loadMenu1

Editoval lukyer (22. 7. 2011 19:46)

JakubJarabica
Gold Partner | 184
+
0
-

Lenže signál sa generuje v rámci aktuálneho presenteru. Ak ho máš aj definovaný v BasePresneteri, teda je dostupný vo všetkých podedených, bude generovať url adresy v rámci tých podedených.

lukyer
Člen | 33
+
0
-

Signál mám definovaný v SitePresenter, ne v BasePresenter … a SitePresenter je jediný, který na tom webu používám. K tomu co jsem uvedl výše –

Například:

projekt/kontakt/?item=x&do=loadMenu1

je ve tvaru SLOŽKA/ACTION/?PARAMETRY … Vzhledem k tomu, že jiný Presenter nepoužívám /mimo base a error/, tak zbytečně tuto informaci v URL nepřenáším.

Nedochází mi stále něco? Chci jen, ať vygenerované URL na signál NEOBSAHUJE název ACTION, ze kterého bylo URL generováno /to je ten příklad o 2 příspěvky výše, kde je několik URL ukazujících na stejný obsah/.

JakubJarabica
Gold Partner | 184
+
0
-

Keď sa generuje URL odkazu, zachováva sa aktuálny presenter a action, len sa pridá „do“ a názov signálu. Aj keby sa ti podarilo vygenerovať URL bez action(asi jedine hard-coded), tak by pri vykonaní signálu vyrenderovalo defaultnú akciu(ktorá je predpokladám odlišná od inej akcie).

lukyer
Člen | 33
+
0
-

Ale to mi právě vůbec nevadí, že vygeneruje defaultní akci, to je OK. Stejně to obsluha toho signálu „přebije“. Jak teda vy, zkušenější, řešíte tento problém, že jeden signál může mít 100 URL, ačkoliv pořád dělá to samé? /vrátí JSONem nějaké data/