Přesměrování z form success
- scientific
- Člen | 91
Ahoj, jak se prosím přesměrovat z form success, on tam asi hraje nějak roli AJAX (dialog používá AjaxResponse($data)) a netuším co s tím, veškeré snahy o přesměrování nefungují, zkoušel jsem i něco jako redirect() a redirectUrl().
Takto vypadá můj kód:
public function success(Form $form, $values)
{
$url = "https://example.cz/admin/get-dobropis?order_id=".$values['order_id']."&open=1";
// proměnná $url se naplní a zbytek, jakoby se zahodil, resp nezahodil, ale zobrazí zpět stránku ze které jsem otevíral dialogové okno s formuláře. Z mého pohledu jen zavře dialogová okno formuláře po kliknutí na tlačítko "OK", které triggruje success.
//$this->getPresenter()->redirectUrl('Admin:GetDobropis $order[id],true');
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
header("Connection: close");
}
Děkuji za tipy.
Editoval scientific (24. 5. 2022 15:49)
- emololftw
- Člen | 72
Ahoj, pokud chceš redirect po ajaxovém požadavku, doporučuji si z presenteru poslat payload, něco jako:
Presenter:
$this->payload->url = $this->link('MujPresenter:');
Nevím jakou knihovnu pro ajax používáš, ale naja je fakt super. Naja
obsahuje handler na redirect, ale já používám
window.location.href
. Mám tedy trigger na success (https://naja.js.org/#…) a v něm:
*.js
naja.addEventListener('success', (event) => {
if (typeof event.detail.payload.url !== 'undefined') {
window.location.href = event.detail.payload.url
}
}
Payload posílám z místa, kde chci vykonat redirect.
- scientific
- Člen | 91
Už to mám, vyřešeno, díky.
Žádnou naju nechci, když všechny ostatní dialogy fungují bez naja.
Došlo mi, že ten skript order_id zná:
$(button).data("value");
Vyřešeno takto:
<div id="dialog_adminDobropisConfirm" class="dialog">
{_"D_DOBROPIS_TEXT"}
{ifset $eet_enabled}
<br><br>
<span class="checkbox">
<input type="checkbox" class="eet"><label>{_"D_DOBROPIS_EET_TEXT"}</label>
</span>
{/ifset}
</div>
<script>
$(function(){
$(".use_dialog_adminDobropisConfirm").unbind();
$(".use_dialog_adminDobropisConfirm").click(function(e) {
var button = $(this);
e.preventDefault();
$("#dialog_adminDobropisConfirm").dialog({
title:{_"D_DOBROPIS_NADPIS"},
modal:true,
draggable:false,
width:500,
buttons: {
{_"D_DOBROPIS_BTN_OK"}: function() {
var d = this;
if ($(button).hasClass("postId")) {
var values = {};
values[$(button).data("identifier")] = $(button).data("value");
if ($(d).find(".eet").prop("checked")) {
values["eet"] = true;
}
values["do"] = $(button).data("form");
$.post("", values, function(data) {
$(d).dialog("close");
UseAjaxResponse(data);
var order_id = $(button).data("value");
location.href = "https://example.cz/admin/get-dobropis?order_id="+order_id+"&open=1";
});
} else {
window.location = $(button).attr("href");
}
},
{_"D_DOBROPIS_BTN_STORNO"}: function() {
$(this).dialog("close");
}
}
});
});
});
</script>