Ajax – redirect – persistentní parametry se ztratí
- pasik
- Člen | 8
Ahoj, mám problém se ztrácením persistentních parametrů při redirectu pokud jsou volány ajaxem.
Jedná se o Nette 2.4 a používám js knihovnu nette.ajax.js.
Kód
<?php
class TestPresenter {
/**
* @var int
* @persistent
*/
public $year;
/**
* @var array
* @persistent
*/
public $tags = [];
public function handleSetYear($year)
{
$this->year = $year;
$this->redirect('default');
}
public function handleSetTag($tag)
{
if (($key = array_search($tag, $this->tags)) !== false) {
unset($this->tags[$key]);
} else {
$this->tags[] = $tag;
}
$this->redirect('default');
}
public function renderDefault($year = null, $tags = [])
{
$this->template->tags = $tags;
$this->template->year = $year;
//$this->redrawControl('selectedFilters');
}
}
?>
Šablona
<?php
{block content}
{snippet selectedFilters}
<a class="ajax_" n:href="setYear! 2019">2019</a> |
<a class="ajax_" n:href="setYear! 2020">2020</a> |
<a class="ajax_" n:href="setYear! 2021">2021</a> |
<a class="ajax_" n:href="setTag! Poplatky">Poplatky</a> |
<a class="ajax_" n:href="setTag! Rozpočet">Rozpočet</a> |
<a class="ajax_" n:href="setTag! Voda">Voda</a> |
<hr />
<h2>Filters</h2>
{php print_r($this->tags)}
{php print_r($this->year)}
{/snippet}
{/block}
?>
A teď o co jde. Pokud nepoužiju ajax, tak všechno funguje správně,
parametry se předávájí, doplňují (štítky).
Pokud použiji redirect, tak se nevypíše nic (resp se mi to nějak ztrácelo;
ted už se nevypíše nic).
Pokud vyhodím redirect a nechám v renderDefault redrawControl tak to taky
funguje, ale mám hnusnou URL (handleYear nebo handleTag), tj
test?tag=Rozpočet&year=2021&tags%5B0%5D=Poplatky&do=setTag
Chci mít Url ve formátu renderDefault($year, $tags) (to si pak ještě upravím v routeru), rád bych to měl AJAX-ové a nechci mít v url žádný handleSetter viz výše poznámka o hnusné URL.
Jak na to prosím?
PS. Ještě jsem zkoušel toto:
<?php $this->forward(‚default‘, $this->year,
$this->tags); ?>
Ale URL furt hnusná
test?tag=Poplatky&year=2020&tags%5B0%5D=Voda&tags%5B1%5D=Rozpočet&do=setTag
Takže je to stejné jako kdyby to tam vůbec nebylo a stačí invalidace
snippetu.
Editoval pasik (6. 5. 2021 21:32)