Tlačítko zpět jako u prohlížeče

gizer
Člen | 67
+
+1
-

Dobrý den,
rád bych se dozvěděl jak vyřešit tento problém.

Přistupuji na jednu cílovou šablonu ze dvou různých zdrojových šablon, které mají i různé presentery pomocí klasického odkazu.

<a n:href="Cil:default">Jdi na cílovou šablonu</a>

Může mně někdo prosím poradit, jak přesně má v cílové šabloně vypadat zpětný odkaz, který vede buď na zdrojovou šablonu 1 nebo 2 podle toho odkud jsem na cílovou šablonu přišel. Předpokládám, že persistentní parametr backlink mám v BasePresenteru a je tedy dostupný ve všech děděných presenterech.

Děkuji moc za případnou odpověď.

David Matějka
Moderator | 6445
+
+2
-

při generování odkazu tam připoj backlink:

//presenter:
$this->template->selfLink = $this->link('this');

//latte

<a n:href="Cil:default backlink => $selfLink">Jdi na cílovou šablonu</a>

a v cilove sablone das tu hodnotu do klasickeho odkazu (bez n:href)

//presenter
$this->template->backlink = $this->backlink;

//latte
<a href="$backlink">zpet</a>
gizer
Člen | 67
+
0
-

Děkuji moc za odpověď a vyzkouším. Ještě mám malou otázku. Musím mít tedy i v tomto případě deklarovaný $backlink jako persistentní parametr?

Editoval gizer (25. 2. 2021 11:11)

David Matějka
Moderator | 6445
+
+1
-

ten můj příklad s tim počítá (jelikož na něj sahám přes this->backlink), ale nemusí to byt jediné řešení.

Krátce popíšu možnosti práce s parametry:

  • pokud dám do BasePresenteru persistentní parametr, tak se bude přenášet do všech presenterů, který od něj dědí. a můžu jej jen explicitně odebrat přes backlink ⇒ null. tohle je vhodné pro parametry jako „locale“
  • pokud persistetní parametr dam do konkrétního presenteru (Cil), tak se bude přenášet pouze v requestech v rámci tohoto presenteru. když přejdu na jiný presenter, jeho hodnota se ztratí.
  • můžu také ten parametr uvést do actionDefault($backlink), tím bude persistetní v rámci this. tedy pokud odkazuji třeba this page => $page + 1 nebo pokud odešlu formulář
  • pokud jej neuvedu ani mezi persistentni ani do action parametru, ale sáhnu na něj jen přes $this->getParameter(‚backlink‘), tak pokud bych udělal jakoukoliv akci na té cílové stránce (odeslaní formuláře, stránkování), tak bych o hodnotu toho parametru přišel

z toho vyplívá, ze nejvhodnější bude backlink dat jako persistentní parametr konkrétniho presenteru nebo jako actionDefault($backlink) pro persistentnost v rámci this

David Grudl
Nette Core | 8239
+
+1
-

Někdy se dá použít <a href="javascript:history.back()">Go back</a>.

gizer
Člen | 67
+
0
-

Děkuji všem opravdu moc za užitečné rady.

Jednoduché a srozumitelné. První radu jsem vyzkoušel a funguje to. Nesmí se samozřejmě zapomenout nadefinovat persistentní parametr $backlink. Nejlépe někde u předka v base Presenteru. Funguje to samozřejmě i mezi moduly.

/** @persistent */
    public $backlink = '';

Našel jsem tam jenom drobnou syntaktickou chybu. Chyběly tam závorky.

//latte
<a href="{$backlink}">zpet</a>

Ještě jednou děkuji a snad to bude i ostatním k užitku.