scientific
Člen | 94
+
0
-

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 | 82
+
+2
-

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 | 94
+
0
-

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>