CheckoutProcessProcess.inc.php und order_products_id

Thema wurde von M. Zitzmann, 14. Oktober 2021 erstellt.

  1. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Registriert seit:
    3. März 2016
    Beiträge:
    371
    Danke erhalten:
    120
    Danke vergeben:
    39
    Hallo,

    in der Funktion process_products() der Datei CheckoutProcessProcess.inc.php gibt es den Eintrag

    Code:
    $t_order_products_id = 0; // not used anymore
    
    Für die Verwendung in eine eigene Bestelltabelle bräuchte ich diese ID.
    In alten Gambio-Versionen war für die Ausgabe dieser ID die Funktion save_order_product($p_product_array) zuständig. Die gibt es aber nun nicht mehr.
    Gibt es eine Möglichkeit im Checkout diese Nummer auszulesen nachdem sie in die Tabelle orders_products eingetragen wurde?
     
  2. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.715
    Danke erhalten:
    1.308
    Danke vergeben:
    305
    @M. Zitzmann Wenn du ein Overload der Datei checkoutProcessProcess.inc.php machst, hast du im Objekt die ganzen Produktdaten zur Verfügung:
    PHP:
    $this->coo_order->products
    Du kannst also z.B. die Funktion
    PHP:
    _getOrderItemCollection
    überladen und im Anschluss deine eigenen Daten auswerten und bearbeiten.

    PHP:
    class myCheckoutProccessProcess extends myCheckoutProcessProccess_parent
    {
    protected function 
    _getOrderItemCollection()
        {
    parent::_getOrderItemCollection();
    // put your own code here
    }
    }
     
  3. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Registriert seit:
    3. März 2016
    Beiträge:
    371
    Danke erhalten:
    120
    Danke vergeben:
    39
    Danke.
    Damit bekomme ich mit $product['id'] nur die normale products_id.
    Ich brauche aber die orders_products_id die in die Tabellen orders_products und orders_products_attributes geschrieben wird.
     
  4. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.715
    Danke erhalten:
    1.308
    Danke vergeben:
    305
    @M. Zitzmann Dann ist die CheckoutProccessProcess nicht für dein Vorhaben geeignet, weil an der Stelle sind die Daten noch nicht in der Datenbank, also musst du einen späteren Zeitpunkt wählen, z.B. CheckoutSuccessExternder, wo die Daten bereits in der Datenbank sind und dann von da gelesen werden können. Dann musst du eine eigene Abfrage bauen um die Daten für die orders_id aus der orders_products Tabelle auslesen.
     
  5. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Registriert seit:
    3. März 2016
    Beiträge:
    371
    Danke erhalten:
    120
    Danke vergeben:
    39
    Da kommen wir der Sache schon näher...
    Funktioniert - aber ich habe den gleichen Effekt als wenn ich meine Daten schon in der CheckoutProccessProcess schreibe.

    Für jeden Eintrag den ich in der orders_products_attributes mache wird ein zusätzlicher leerer Eintrag geschrieben.
    In der CheckoutProcessProcess habe ich dazu folgenden Hinweis gefunden:
    Code:
    else // GX-Customizer set data will be connected to empty attribute
                    {
                        $orderItemAttribute = $orderObjectService->createOrderItemAttributeObject(new StringType(''),
                            new StringType(''));
    
                        $orderItemAttributesArray[] = $orderItemAttribute;
                   
    Sobald ein Customizer vorhanden ist kommt eine leere Zeile dazu.
    Seltsamerweise passiert das auch in der CheckoutSuccessExternder obwohl hier die Bestelldaten doch schon alle fertig geschrieben sind...
    Was passiert wenn ich diese leeren Zeilen später wieder lösche?
    Ich habs mal gemacht und bis jetzt keinen negativen Effekt gesehen...