Bestelldetails für Gast

Guten Tag liebe Oxid gemeinde.
Ich hätte da eine frage,
wir wollen in unserem Shop dem Kunden der als Gast bestellt die Möglichkeit geben über einen Link , sich seine Bestellung auf einer Bestelldetailseite 30 Tage lang einzusehen.

Ich habe versucht die Detailseite die ein eingeloggter Kunde zu sehen bekommt einfach in einem neuen template inklusive dazugehörigem Controller zu kopieren und diese dann über den Link aufzurufen.
(account_bill_details.tpl kopiert und umbenannt in account_bill_details_guest.tpl)

Dies Funktioniert auch alles, über einen Link kann ich die Seite ohne Eingeloggt zu sein aufrufen mit der Meldung “The order history is empty.”
Was natürlich Logisch ist da in der getOrderList() ja vorher der getUser() abgefragt wird.

Meine Frage, wie kann ich trotzdem die Bestellung Anzeigen und somit die abfrage mit dem getUser() überspringen in der getOrderList() ?

public function getOrderList()

    {
        if ($this->_aOrderList === null) {
            $this->_aOrderList = array();

            // Load user Orderlist
            if ($oUser = $this->getUser()) {
                $iNrofCatArticles = (int) $this->getConfig()->getConfigParam('iNrofCatArticles');
                $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 1;
                $this->_iAllArtCnt = $oUser->getOrderCount();
                if ($this->_iAllArtCnt && $this->_iAllArtCnt > 0) {
                    $this->_aOrderList = $oUser->getOrders($iNrofCatArticles, $this->getActPage());
                    $this->_iCntPages = round($this->_iAllArtCnt / $iNrofCatArticles + 0.49);
                }
            }
        }

        return $this->_aOrderList;
    }

Hätte da jemand einen kleinen Denkanstoß für mich?

Ich bin im Moment noch Azubi und absolviere hier mein Praktikum. Ich arbeite mich daher in kleineren schritte voran, habt daher bitte etwas nachsehen mit mir :slight_smile:

Vorschlag: Verwende eine eigene Funktion, um direkt auf die Bestellung zuzugreifen und nicht über eine Order-Liste.
Erweitere deinen Controller um eine Funktion, die die Bestellung lädt und an das Template weitergibt.

public function getOrder() {
$sOrderId = ... // Hier Order-Id aus Url auslesen
$oOrder = oxNew('oxOrder');
$oOrder->load($sOrderId);
$this->_aViewData['oOrder'] = $oOrder;
}

Auf jeden Fall hast du dann im Template ein oxOrder-Objekt verfügbar, aus dem du die gewünschten Infos auslesen kannst. Und in der Funktion kannst du auch prüfen, ob die Bestellung bereits älter als 30 Tage ist.
Das solltest du natürlich noch ein wenig absichern (durch einen zusätzlichen Hash oder sowas, der aus der Id generiert wird), damit nicht irgendwelche Leute die Bestellungen abrufen können.

Nach vielem hin und her hat es dann doch so geklappt, vielen dank für die Hilfe

1 Like

Ich bin wohl doch nicht ganz Fertig, ich versuche nun über die Url noch das alles zu verschleiern. Mein Chef meinte ich soll es mit der .htaccess versuchen.

leider bisher ohne erfolg. wie bekomme ich aus

localshop. de:7443/index.php?cl=shop_account_extend_bill_details_guest&oxid=c6749a47e28f3a784e2c8a1eb00afcf9

localshop. de:7443/youOrder=c6749a47e28f3a784e2c8a1eb00afcf9

in der .htaccess habe ich folgendes geschrieben:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{QUERY_STRING} ^cl=shop\_account\_extend\_bill\_details\_guest&oxid=c6749a47e28f3a784e2c8a1eb00afcf9$
RewriteCond %{REQUEST_URI} ^\/index\.php$
RewriteRule .* https://localshop.de:7443/youOrder=c6749a47e28f3a784e2c8a1eb00afcf9? [R=301,L]
</IfModule>

ich bekomme dabei den Error 404

Hi Jaba :slight_smile:

Ja, das ist zu erwarten weil youOrder=c6749a47e28f3a784e2c8a1eb00afcf9 ist in der Tabelle oxseo nicht bekannt und kann nicht aufgelöst werden.

Du müsstest im Prinzip für jede Gast-Bestellung einen Eintrag in der oxseo Tabelle anlegen.

Viele liebe Grüße aus dem Harz,
Tim

ps. Ist Prüfungsphase bereits rum?

1 Like

einfacher geht es wenn man in der functions.php im Verzeichnis modules eine Abfrage nach einem übergebenen Parameter macht und entsprechend umleitet
PS: dort kannst du dann auch die 30 Tage Frist (aus Beitrag #1) programmieren

2 Likes