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.