Hallo, es wäre wünschenswert wenn der Kunde ganz normal seine Bestellbestätigung per Email erhält, das Unternehmen aber eine abweichende Email, z. B. mit zusätzlichen und/oder ausgeblendeten Angaben, erhält. Geht das? In den Email-Vorlagen gibt es sORDER, die standardmäßig an Kunde und Unternehmen gesendet wird, also mit genau demselben Inhalt. Kann ich z. B. sORDER2 anlegen und irgendwo einstellen oder programmieren, dass dies die Mail an das Unternehmen wird? Danke im Voraus. Eronaile
Mit “irgendwo Einstellen” weiß ich nicht, das wäre aber wirklich der beste Weg. Wenn es sich nicht über Einstellungen machen lässt, kann man das leicht programmieren: ein Hook auf sSaveOrder()
Etwas präziser bitte. Was muss ich wo machen?
Du musst Programmieren… Wenn du Programmieren kannst und du dir das zutraust kann ich dir mehr Infos geben.
[quote=“eronaile”]Etwas präziser bitte. Was muss ich wo machen?[/quote] Dafür muss ein Hook erstellt werden: Einführung in Hook System Der Hook müsste für die Funktion sSaveOrder() aus der Klasse sOrder sein. Das geht ungefähr so: $hook = $this-\>createHook( 'sOrder', 'sSaveOrder', 'onSaveOrderAfter', Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($hook);
Danach in der Funktion onSaveOrderAfter() die gewünschte Funktionalität Programmieren.
Ach sowas Ähnliches wie Listener-Funktionalität in z. B. Java. Danke, werde mir das mal anschauen! EDIT: Die Klasse sOrder.php enthält in Zeile 932-934: if (!$mail->Send()){ $this->sSYSTEM->E_CORE_WARNING("##sOrder-sSaveOrder-#03",„Could not send confirmation mail“); } Wird bei dieser IF-Abfrage die Funktion Send() ausgeführt? Wenn es wie in Java ist, dann ja und damit würden die Mails verschickt. Wenn nicht wüsste ich nicht, in welcher Zeile der konkrete Befehl zum Versenden gegeben wird. Soweit ich das bis jetzt sehe müsste ich also z. B. $template2 und $mail2 definieren im Code, so dass die Mail an den Betreiber ein anderes Template benutzt. Zum Thema Hook: wird er nachher ausgeführt kriegt der Betreiber ja 2 Mails, eine die genau wie beim Kunden aussieht und eine, die wie im Hook definiert aussieht. Nicht schlimm aber suboptimal. Vorher ausführen: genau dasselbe. Ersetzen: traue ich mir ehrlich gesagt nicht ganz zu, weil man ja viel mit dem $args arbeitet und die „Original“-Funktion ganz darauf anpassen muss. Spricht denn etwas dagegen, direkt in der sOrder.php zu manipulieren und den alten Code z. B. auszukommentieren? Oder wird das bei Updates rückgängig gemacht? In dem Fall würde ich wahrscheinlich einen Hook benutzen, der nach der Core-Funktion auslöst.
Ein Update: Leider bin ich nicht gut in PHP, ich wäre sehr dankbar für eine grobe Anleitung (nur soviel die Zeit erlaubt), wie ich die Methode sendMail in sOrder.php per Hook überschreiben kann, so dass 2 verschiedene Mails versendet werden. Ich weiß nicht, ob ich sOrder.php einfach so verändern kann ohne die Benutzung von Hooks. Falls ja wäre das sehr viel einfacher und ich könnte es vermutlich auch allein programmieren. Aber die Methode greift ja oft auf Variablen aus der Klasse zurück (vor allem die ganzen $this->…->… Aufrufe!) und wie man sowas per Hook hinbekommt weiß ich nicht. Schwierig? Oder gibt es eine elegante Lösung? Bin für jede Hilfe dankbar EDIT: Wenn ich dem Code nur klarmachen könnte, dass $mail = $this->sSYSTEM->sMailer; $mail2 = $this->sSYSTEM->sMailer; zwei verschiedene Objekte, Variablen, wie auch immer das in PHP heißt, sein soll… scheinbar sind $mail und $mail2 dasselbe Objekt. Was mache ich falsch?
Melde mich hier später, aber schon mal: die Core Kalsse zu ändern ist keine gute Idee, weil (wie schon selbst geschrieben) die Updatefähigkeit dadurch verloren geht. if (!$mail-\>Send()){
Hier wird die Funktion aufgerufen und gelichzeitig der Rückgabewert geprüft, genau wie in Java.
UPDATE: Ich habe das Problem erst per Hookpoints gelöst (sehr komfortabel aber leider werden die in 4.0.0 ja voraussichtlich rausgeworfen). Mittlerweile habe ich das Ganze auf Hook-System (!= Hookpoints) umgestellt. Dazu baut man sich ein eigenes, lokales Mini-Plugin. Dieses greift in die gewünschte Funktion (hier: sendMail aus der Klasse sOrder) ein, entweder vor dem Aufruf, nach dem Aufruf oder als Komplettersetzung. Ich habe die Funktion mit dem Plugin ersetzen lassen weil der Core-Code einfach nicht passt. Die $this aus der Originalfunktion muss man durch $args->getSubject() ersetzen. Hätte ich das mal gewusst… Den Code kann man so einfach copy-pasten und dann Suchen&Ersetzen, danach die wenigen Änderungen am Code vornehmen, fertig. Insofern: Problem gelöst, danke für alle Tipps. EDIT: Falls jemand anders dasselbe oder ein Ähnliches Problem hat: PM an mich und ich schicke gern den Mini-Plugin-Code zu. An sOrder.php selber muss nichts geändert werden sofern man Hooks benutzt.