Redirects im Admin Bereich des Eigenmoduls (OXID 6.0.0 CE)

Hallo!

Ich versuche im Admin Menü des Eigenmoduls ein Redirect zu erstellen. Ich will eigentlich einen GET Parameter in der URL haben mit dem ich eine DB-Abfrage mache und dann die einzelnen Resultate anzeige. Ich würde dafür gerne den bestehenden Menüpunkt benutzen.

Ich habe das SUBMENU “Orders” (keine OXID Orders) im meinem Modul. Wenn ich normal drauf-klicke bekomme ich eine Liste von Bestellungen die in der Datenbank vorhanden sind. Was ich gerne noch dazu hätte wäre:

Wenn ich auf einen einzelnen Order klicke soll er ein Redirect, bzw. Reload der Seite machen, mit der Order ID als GET Parameter, und dann einen anderen View anzeigen. Ich hatte mir das so vorgestellt:

class admin_stinasbsmoduleorders extends oxAdminView
{
    public function render()
    {
        parent::render();

        if (isset($_GET['shop_order_id'])) {
            // Weitere prüfungen und Datenbank Abfrage

            return 'admin_stinasbsmodulsingleorder.tpl';
        } else {
            return 'admin_stinasbsmodulallorders.tpl';
        }
    }
}

Mein Problem ist einfach dieser Redirect mit dem GET Parameter. ich werde immer komisch umgeleitet (ohne Admin sidebar). Ich nehme an das es an diesen FRAMESETs liegt und/oder den zusätzlichen GET Parametern.

Ich habe folgendes versucht:

$admin_url = $oxViewConfig->getBaseDir() . $oxViewConfig->getAdminDir() . '/';
$redirect_url = $admin_url . 'index.php?force_admin_sid=' . $fasid . '&stoken=' . $stoken . '&cl=' . $cl . '&shop_order_id=' . $shop_order_id;

und dann einfach Header('Location: ’ . $redirect_url); Will aber nicht.

Ideen?

Das klingt alles viel zu umständlich. Du kannst doch per AJAX auch bestimmen, welches TPL geladen werden soll. Schreib doch einfach mal, was genau angezeigt werden soll?

Mein Menü sieht so aus:

  • Settings
  • Products
  • Orders

Wenn ich auf Products gehe und ein Produkt kaufe (per AJAX) dann soll ich auf Orders umgeleitet werden, aber nicht auf alle, sondern auf diesen einzelnen Order den ich eben gekauft habe.

Wenn ich normal auf Orders klicke soll ich einen Überblick (Tabelle) aller Order haben, und beim klick auf jeweiligen Order die Einzelübersicht (genau wie nach der Umleitung nach dem Produktkauf).

Habe ich das so gut erklärt?

Achso, d.h. Du hast ein Backend-Order-Modul erstellt, mit dem “normale” Bestellungen für Kunden generiert werden? Und Menu heißt ganz normal menu.xml?

Durch die Umleitung (redirect) lädst Du insgesamt nur das Topframe, was natürlich ohne Sidebar etc. geladen wird. Schau Dir mal “_navAct” an.
Und zum laden der ID:

window.onload = function ()
{
top.reloadEditFrame();
[{ if $updatelist == 1}]
top.oxid.admin.updateList(‘[{ $oxid }]’);
[{ /if}]
}

Genau.

Backend-Order-Modul, aber nicht für die Orders vom Shop, sondern Order von einer eigenen Produkt-Palette die von dem Modul selbst kommt. Und ja, normale menu.xml:

<?xml version="1.0" encoding="UTF-8"?>
<OX>
    <OXMENU id="NAVIGATION_ESHOPADMIN">
        <MAINMENU id="STINA SBS Module">
            <SUBMENU id="Settings" cl="admin_stinasbsmodule" />
            <SUBMENU id="Products" cl="admin_stinaisbsmoduleproducts" />
            <SUBMENU id="Orders" cl="admin_stinasbsmoduleorders" />
        </MAINMENU>
    </OXMENU>
</OX>

So wie ich das sehe ist _navAct() eine JavaScript funktion für das Verlinken von Admin Menüpunkten? Nimmt es auch eine URL als Parameter? Ich werde mir das jetzt ein bisschen besser ansehen, vielleicht ist das die Antwort.

Hab’s jetzt herausgefunden, vielen dank @rubbercut

Lösung:

Im meinem AJAX response habe ich jetzt folgendes:

success: function(response) {
    top.basefrm.location = response
}

Die response ist vom Server mittels AJAX call generiert und schaut so aus:

http://localhost/oxid/admin/index.php?force_admin_sid=dvteg8528qnfh4hlecq621s8b2&stoken=9709353&cl=admin_stinainternetmarkeorders&shop_order_id=959920858

Um die volle URL zu generieren habe ich das hier gemacht:

$oxViewConfig = new oxViewConfig();
$cl           = 'admin_stinasbsmoduleorders';
$fasid        = $oxViewConfig->getSessionId();
$stoken       = filter_var($_POST['stoken'], FILTER_SANITIZE_STRING);
$admin_url    = $oxViewConfig->getBaseDir() . $oxViewConfig->getAdminDir() . '/';

Das stoken habe ich per JavaScript im POST dazu gesendet. Und zum Schluss die ganze URL per json_encode zurückgegeben:

echo json_encode($admin_url . 'index.php?force_admin_sid=' . $fasid . '&stoken=' . $stoken . '&cl=' . $cl . '&shop_order_id=' . $shop_order_id);
die();

Und die admin_stinasbsmoduleorders Klasse schaut wie in meinem oberen Post aus.

Nochmals, vielen dank!

Diesen Thread kann man auch als “Gelöst” markieren.