Plugin umschreiben Warenkorb auslesen

Hallo Zusammen,

Wir nutzen ein Plugin welches von einem ehemaligen Mitarbeiter von uns erstellt wurde.

Diese Plugin liest im Prinzip die Wunschliste aus um daraus ein PDF zu erstellen.

Mein Chef möchte nun aber dass das Plugin den Warenkorb auslist.

Ich dachte ich könne einfach ein paar Variabeln ändern um das hin zu bekommen.

Der Code (Ausschnitt) des Plugins siht so aus:

public function onPostDispatchNote(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->getSubject();
        $sessionId = $controller->Front()->Request()->getCookie('sUniqueID');

        if ($controller->Front()->Request()->getActionName() == 'index') {
            $view = $controller->View();

            $view->assign('sUserData', Shopware()->Modules()->Admin()->sGetUserData());
            $view->assign('cookieId', $sessionId);
        }

        if ($controller->Front()->Request()->getActionName() == 'ajaxAdd') {


            $this->saveNoteInfos($sessionId);

        }
    }

    public function saveNoteInfos($sessionId)
    {
        $db = Shopware()->Db();

        $userid = Shopware()->Session()->get('sUserId');

        $noteId = $db->fetchOne('SELECT `id` FROM `s_order_notes` WHERE `sUniqueID`=? ORDER BY `datum` DESC LIMIT 1',$sessionId);

        if (!$userid) {
            $userid = 0;
        }

        $data = array(
            'userid' => $userid,
            'noteid' => $noteId,
            'sessionid' => $sessionId,

        );

       $db->insert('qp_note_attributes', $data);
    }

 

leider komme ich da nicht wirklich weiter, die „UniqueID“ gibt es in der „s_order_basket“ ja nicht, 

also wollte ich die SessionId auslesen, leider funktioniert das irgendwie nicht, hier mein Ansatz:

public function onPostDispatchNote(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->getSubject();
        $sessionId = Shopware()->Front()->Request()->getSession('key');

        if ($controller->Front()->Request()->getActionName() == 'index') {
            $view = $controller->View();

            $view->assign('sUserData', Shopware()->Modules()->Admin()->sGetUserData());
            $view->assign('cookieId', $sessionId);
        }

        if ($controller->Front()->Request()->getActionName() == 'ajaxAdd') {


            $this->saveNoteInfos($sessionId);

        }
    }
   

    public function saveNoteInfos($sessionId)
    {
        $db = Shopware()->Db();

        $userid = Shopware()->Session()->get('sUserId');

        $noteId = 'SELECT `id` FROM `s_order_basket` WHERE `sessionID`=? AND `modus`=1';

        if (!$userid) {
            $userid = 0;
        }

        $data = array(
            'userid' => $userid,
            'noteid' => $noteId,
            'sessionid' => $sessionId,

        );

       $db->insert('qp_basket_attributes', $data);
    }

 Kann mir jemand auf die Sprünge helfen? wo mein Ansatz falsch ist.

 

Beste Grüße

Pasi

Ich gehe mal davon aus, dass dieses PDF der Kunde erst im eingeloggten Zustand sich erstellen lassen kann oder sehe ich das falsch?

Zumindest im eingeloggten Zustand kann der Warenkorb (s_order_basket) über die „userID“ des Users erfasst werden.

 

Hallo,

Nein, leider nicht, dieses PDF soll auch für Gast Kunden sein.

Beste Grüße

Pasi

Aha, na dann musst du bedenken, dass Gast Kunden keine UserID haben und somit nur die SessionID zur Verfügung steht. Das Auslesen vom Warenkorb sollte ja jetzt nicht das Problem sein (je nachdem was man alles auslesen möchte). 

Ja, die SeesionID versuche ich abzugreifen, aber irgendiwe scheint mein Code nicht zu gehen. 

Die DB bleibt leer.

Die DB bleibt leer.

Diese Aussage verwirrt mich ein wenig. Beim AUSLESEN wird ja auch nichts in die Datenabank geschrieben. Was soll das wo leer bleiben? Ja und die SessionID erfasste ich ganz einfach mit

$sessionID = Shopware()->Session()->get('sessionId');

Und damit wird die Tabelle vom Warenkorb ausgelesen. Ganz einfaches Beispiel:

SELECT ob.articlename, ob.articleID, ob.ordernumber 
FROM s_order_basket ob
WHERE ob.sessionID = '9h0dfsnuvqs13pdqsjv7phhh7b' 
AND ob.articleID != 0 

Sofern Daten enthalten sind, kommt auch etwas zurück.

Jetzt bin ich verwirrt. ich dachte dieser teil befüllt die Datenbank:
 

public function saveNoteInfos($sessionId)
    {
        $db = Shopware()->Db();

        $userid = Shopware()->Session()->get('sUserId');

        $noteId = 'SELECT `id` FROM `s_order_basket` WHERE `sessionID`=? AND `modus`=1';

        if (!$userid) {
            $userid = 0;
        }

        $data = array(
            'userid' => $userid,
            'noteid' => $noteId,
            'sessionid' => $sessionId,

        );

       $db->insert('qp_basket_attributes', $data);
    }

 

Hmm, ich dachte ihr wollt gleich ein PDF erstellen und nicht extra noch eine andere Tabelle mit Daten füllen? Und was soll das “modus” im Select? In der Tabelle gibt es keine Spalte “modus”, jedenfalls nicht in der aktuellen Shopware Version. Und was ist das mit der Zeile bei $noteId? Fehlt da nicht etwas?

In s_order_basket gibts natürlich ein modus - muss ja auch darstellen ob sich ein Gutschein drin befindet oder nicht?

 

Hast du schonmal den Insert gedumpt was er zurück gibt an Fehlermeldung?

 

Gruß Alex

Oh stimmt, habe ich übersehen! Dennoch ist $noteId wohl eine tote Zeile.

$noteId = $db->fetchOne('SELECT `id` FROM `s_order_notes` WHERE `sUniqueID`=? ORDER BY `datum` DESC LIMIT 1',$sessionId);

$noteId = 'SELECT `id` FROM `s_order_basket` WHERE `sessionID`=? AND `modus`=1';

Hinzu kommt, wenn ich einen Artikel in den Warenkorb lege ist modus = 0
Bei modus 1 wäre der Artikel ein Prämien Artikel, weiß nicht ob die Abfrage nach modus 1 so sein soll.

 

Die erste Zeile:

$noteId = $db->fetchOne('SELECT `id` FROM `s_order_notes` WHERE `sUniqueID`=? ORDER BY `datum` DESC LIMIT 1',$sessionId);

kommt aus dem ursprungs Plugin, die funktioniert, denn das Plugin läuft ja ohne Probleme.

Die untere Zeile, war ein Versuch von mir, die geht dann wohl wirklich nicht.