Overload oder Extender

Thema wurde von Sommerzauber, 23. Juni 2018 erstellt.

  1. Sommerzauber
    Sommerzauber Erfahrener Benutzer
    Registriert seit:
    16. März 2018
    Beiträge:
    131
    Danke erhalten:
    41
    Danke vergeben:
    55
    Hallo Leute,

    Um Verwirrungen zu vermeiden: Ich bin von "Sommerzauber" gebeten worden eine eMail an seine Wawi nach erfolgreicher Bestellung in einen frisch aufgesetzten GX3 einzubauen. Ich schreibe hier unter seinem Account.
    Nachdem ich nun einige Zeit hier im Forum verbracht habe, bin ich noch verwirrter als vorher. Ich habe lange Jahre einen OSC-Shop gewartet, betrieben und programmiert... da hätte ich einfach einen include in die checkout_success.php eingebaut und gut. Jetzt habe ich schon gelernt, dass ich wegen der Updatebarkeit einen Extender oder Overload oder beides bauen muss.
    Ich habe mir also das Extender-Sample aus der GXUserComponents/overloads/_extender_samples/CheckoutSuccessExtenderComopnents genommen, das Verzeichnis CheckoutSuccessExtenderComopnents in overloads erstellt und das Sample hinein kopiert. Dann habe ich die ganzen "Samples" aus den Namen gelöscht und die Caches geleert.
    Die gute Nachicht ist, das tatsächlich etwas ausgeführt wird, was jedoch zur Fehlermeldung FATAL ERROR(1): "Class 'CheckoutSuccessExtender_parent' not found" führt.
    Ich könnte jetzt erstmal einen Tipp gebrauchen, ob ich grundsätzlich richtig bin an der Stelle, und warum die Klasse nicht vorhanden ist...
    Danke schonmal im voraus!
    Denzel.
     
  2. Dennis (MotivMonster.de)
    Dennis (MotivMonster.de) G-WARD 2013/14/15/16
    Registriert seit:
    22. September 2011
    Beiträge:
    31.303
    Danke erhalten:
    6.268
    Danke vergeben:
    1.118
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Findest alles hier: (Link nur für registrierte Nutzer sichtbar.)

    (Link nur für registrierte Nutzer sichtbar.)

    (Link nur für registrierte Nutzer sichtbar.)
     
  3. barbara
    barbara G-WARD 2014-2020
    Registriert seit:
    14. August 2011
    Beiträge:
    35.657
    Danke erhalten:
    11.371
    Danke vergeben:
    1.616
    Warum über einen Overload oder so und nicht einfach mit einer Weiterleitung in den E-Mail-Optionen?
     
  4. Sommerzauber
    Sommerzauber Erfahrener Benutzer
    Registriert seit:
    16. März 2018
    Beiträge:
    131
    Danke erhalten:
    41
    Danke vergeben:
    55
    Eine Weiterleitung würde, wenn ich richtig verstehe, die Bestellbestätigung versenden, oder ? Ich brauche eine speziell konstruierte eMail, die von der Wawi gelesen und als Bestellung erkannt werden kann. Sieht ungefähr so aus:
    AUTOVORGANGIMPORT: ###AFS_VORGANGIMPORT#
    ###LIEFERANSCHRIFT:#
    ###BEMERKUNG:TEST TEST#
    ###KNUMMER:#
    ###ANREDE:Herr#
    ...

    Ich schätze, dass ich die Konstruktion irgendwie hin bekomme, das Script aus OSC liegt ja vor. Ich brauche nur die entsprechenden Variablen finden ($orders in OSC) und anpassen. Im Moment suche ich erstmal die richtige Stelle, um den Versand anzustoßen.
     
  5. barbara
    barbara G-WARD 2014-2020
    Registriert seit:
    14. August 2011
    Beiträge:
    35.657
    Danke erhalten:
    11.371
    Danke vergeben:
    1.616
    Das ist natürlich etwas anderes.
    Da musst Du basteln.
     
  6. Sommerzauber
    Sommerzauber Erfahrener Benutzer
    Registriert seit:
    16. März 2018
    Beiträge:
    131
    Danke erhalten:
    41
    Danke vergeben:
    55
    An welcher Stelle werden denn die Order-Daten aufbereitet, so dass man mit z.B.
    $customerAdressBlock = $order->getCustomerAddress();
    oder
    $customerAdressBlock->getFirstname();
    darauf zugreifen kann ? Ich brauche nämlich so ziemlich alle Orderdetails.
     
  7. Anonymous
    Anonymous Administrator
    Mitarbeiter
    Registriert seit:
    26. April 2011
    Beiträge:
    1.954
    Danke erhalten:
    1.588
    Danke vergeben:
    339
    #7 Anonymous, 24. Juni 2018
    Zuletzt bearbeitet: 24. Juni 2018
    @Sommerzauber Erstelle am besten ein Overload für die Datei system/classes/orders/SendOrderProcess.inc.php.

    Wenn du schon die Shopversion 3.8 oder höher einsetzt, empfehle ich ein GXModul zu erstellen.

    Lege dazu eine Datei mit dem Namen WawiMailSendOrderProcess.inc.php im Ordner /GXModules/Sommerzauber/WawiMail/Shop/Overloads/SendOrderProcess/ mit folgemdem Inhalt an:

    PHP:
    class WawiMailSendOrderProcess extends WawiMailSendOrderProcess_parent
    {
    public function 
    proceed()
        {
    parent::proceed();
    }
    }
    Hinter
    PHP:
    parent::proceed();
    fügst du dann dein eigenen PHP Code zum lesen der Bestelldetails und senden der Mail ein.

    An die Bestelldetails kommst du mit dem folgenden Code:

    PHP:
    $orderReadService StaticGXCoreLoader::getService('OrderRead');
         
    $order $orderReadService->getOrderById($orderId);
    $order->getOrderItems()->getArray();
    Weitere Infos findest du unter folgender URL: (Link nur für registrierte Nutzer sichtbar.)

    Eine Mail sendest du am besten mit folgendem Code, dann wird die Mail auch im Gambio Admin unter "Kunden->E-Mails" gespeichert. Wenn du das nicht möchtest, muss du deine eigene Mail Methode schreiben in PHP:

    PHP:
    xtc_php_mail($from_email_address,
                            
    $order->customer['firstname'].' '.$order->customer['lastname'],
                            
    EMAIL_BILLING_ADDRESS,
                            
    STORE_NAME,
                            
    EMAIL_BILLING_FORWARDING_STRING,
                            
    $order->customer['email_address'],
                            
    $order->customer['firstname'].' '.$order->customer['lastname'],
                            
    $t_mail_attachment_array,
                            
    '',
                            
    $order_subject,
                            
    $t_content_mail,
                            
    $t_txt_mail
               
    );
     
  8. Sommerzauber
    Sommerzauber Erfahrener Benutzer
    Registriert seit:
    16. März 2018
    Beiträge:
    131
    Danke erhalten:
    41
    Danke vergeben:
    55
    Hallo Till,

    mit dem Overload bin ich schon gut voran gekommen. Ich suche mir grade die ganzen Daten für die Mail aus der order Klasse zusammen. Leider habe ich noch nicht so besonders viel mit Objekten gearbeitet und habe grade Schwierigkeiten mit den Artikeln und den Gesamtsummen, weil die in Objektarrays verpackt sind. Kannst Du mir einen Tip geben, wie ich z.B. an den Namen des ersten bestellten Artikels komme ?

    $order_Items = $order->getOrderItems();

    Soweit bin ich, aber wie komme ich dann weiter ?

    StoredOrderItemCollection Object
    (
    [collectionContentArray:protected] => Array
    (
    [0] => StoredOrderItem Object
    (
    [id:protected] => 11
    [productModel:protected] => 38107
    [name:protected] => Artikelname
    [price:protected] => 99.99
    [quantity:protected] => 1
    [tax:protected] => 19
    [taxAllowed:protected] => 1
    [discountMade:protected] => 0
    [shippingTimeInfo:protected] => ca. 1-3 Tage (Lagerware)
    [attributes:protected] => StoredOrderItemAttributeCollection Object
    (
    [collectionContentArray:protected] => Array
    (
    )

    )

    ...

    Danke für die Mühe !

    P.S. wie fügt man hier übrigens Quellcode ein ?
     
  9. Sommerzauber
    Sommerzauber Erfahrener Benutzer
    Registriert seit:
    16. März 2018
    Beiträge:
    131
    Danke erhalten:
    41
    Danke vergeben:
    55
    Ok, hab alles gefunden. Die eMail wird wie gewünscht versand.
    Danke für Eure Hilfe !
    Denzel.
     
  10. barbara
    barbara G-WARD 2014-2020
    Registriert seit:
    14. August 2011
    Beiträge:
    35.657
    Danke erhalten:
    11.371
    Danke vergeben:
    1.616
    in der Leiste mit den Icons ist ein "+" - Symbol, darüber öffnet sich eine Code-Box für Quellcodes oder lange Texte.
     
  11. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    26. Oktober 2011
    Beiträge:
    967
    Danke erhalten:
    149
    Danke vergeben:
    130