You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Meine Frage: Gibt es einen Weg um eigene Tags im E-Mail Template zu nutzen?
Falls nein, wäre mein Vorschlag das als Verbesserung in das Plugin einzubauen.
Situation
Für meinen Anwendungsfall wollte ich basierend auf Wettervorhersagen für den nächsten Tag Warnungen vor Glätte, Schnee oder Hitze in der Buchungserinnerung anzeigen. Also sowas wie, "Achtung vor glatter Fahrbahn" wenn die Temperatur unter 0 Grad fällt.
Problem
Ich habe keinen für mich passenden Weg über die vorhandene Mittel von CommonsBooking gefunden. Es gibt einen Filter für den Nachrichten-Teil der Mail (commonsbooking_mail_body) aber dort kann ich auf der Datenstruktur nur mit replace/append arbeiten. Weiterhin gibt es einen template-Tag Filter, diese funktioniert aber glaube ich auch nicht mit einem Tag, welcher nicht als key im objects array ist.
Lösung
Vorerst habe ich einen eigenen Filter commonsbooking_mail_objects, welcher den objects-Parameter der prepareMail/TemplateParser Aufruf erweitern kann. So kann ich dem objects-Array weitere Objekte mitgeben, welche dann im Template aufgelöst werden. Also Beispielsweise {hints:weather}. Da der Filter das objects-Array als Parameter erhält, kann er für Berechnungn z.B. auf das Booking oder Location Objekt zugreifen.
Diskussion
Mich würde interessieren ob es noch andere Möglichkeiten gibt die mir entgangen sind?
Ob es noch alternative Wege zum Einbau von benutzerdefinierten Tempalte-Tags gibt, welche ich übersehen habe. Das Anlegen eines Filters im Bereich des objects-Arrays fand ich passend.
Unabhängig von den genannten Fragen:
Refactoring: Aktuell können wir versch. Custom-Post-Type Objekte (z.B. Booking-Objekt), WP_User oder WP_Post abfragen. Im Code werden diese Objekte (und deren Instanziierung) teilweise missbraucht um so Daten in die E-Mail-Templates zu bekommen. Das finde ich unsauber und es könnte ein Refactoring vertragen. Sonst werden weiterhin inkonsitent verwendete Objekte instanziert und es verfestigen sich Code-Strukturen, welche die Lesbarkeit und Wartbarkeit beeinträchtigen. Hierzu vielleicht ein eigenes Issue?
Bei der Verallgemeinerung des Anwednungsfalls, also hin zu einer Schnittstelle zur Bereitstellung von Template-Tags, sind der Kreativität ja keine Grenzen gesetzt. So könnte das Plugin für simple Contributions geöffnet werden, welche im besten Fall als einzelne Abhängigkeiten nur den Filter hätten. Diese Contributions könnten dann entweder als Teil des Cores veröffentlicht werden oder aber über eigene Plugins.
Anpassung im Message Typ
Folgende Anpassung ist im Message-Typ vorzunehmen, um den Mail-Objects-Filter nutzen zu können. Das beipsiel im phpdoc String nutzt den hack über das WP_User Objekt, um Daten im Template zu erhalten.
$action = $this->getAction();
$message = $this;
/** * Default objects for messages, sent out by CommonsBooking Plugin. * * For which object types you can inject into the array, {@see CB::get()} * * Example: * * $object = new \WP_User((object)array( "ID" => -1)); * $object->myvalue1 = 'Hello'; * $object->myvalue2 = 'World'; * $objects[] = [ * 'mytag' => $object * ]; * * Then you can reference the tag in the email template like this: {mytag:myvalue1} {mytag:myvalue2} * * @param array $objects assoc array of $tag => $object, where you can reference in the template via {$tag:$object_member} * @param string $action the action of the message to filter the objects * @param Message $message the full context * *@since 2.10.3 * */$objects = apply_filters( 'commonsbooking_mail_objects', $objects, $action, $message );
The text was updated successfully, but these errors were encountered:
tldr;
Meine Frage: Gibt es einen Weg um eigene Tags im E-Mail Template zu nutzen?
Falls nein, wäre mein Vorschlag das als Verbesserung in das Plugin einzubauen.
Situation
Für meinen Anwendungsfall wollte ich basierend auf Wettervorhersagen für den nächsten Tag Warnungen vor Glätte, Schnee oder Hitze in der Buchungserinnerung anzeigen. Also sowas wie, "Achtung vor glatter Fahrbahn" wenn die Temperatur unter 0 Grad fällt.
Problem
Ich habe keinen für mich passenden Weg über die vorhandene Mittel von CommonsBooking gefunden. Es gibt einen Filter für den Nachrichten-Teil der Mail (
commonsbooking_mail_body
) aber dort kann ich auf der Datenstruktur nur mitreplace/append
arbeiten. Weiterhin gibt es einen template-Tag Filter, diese funktioniert aber glaube ich auch nicht mit einem Tag, welcher nicht als key im objects array ist.Lösung
Vorerst habe ich einen eigenen Filter
commonsbooking_mail_objects
, welcher denobjects
-Parameter der prepareMail/TemplateParser Aufruf erweitern kann. So kann ich dem objects-Array weitere Objekte mitgeben, welche dann im Template aufgelöst werden. Also Beispielsweise{hints:weather}
. Da der Filter das objects-Array als Parameter erhält, kann er für Berechnungn z.B. auf das Booking oder Location Objekt zugreifen.Diskussion
Mich würde interessieren ob es noch andere Möglichkeiten gibt die mir entgangen sind?
Ob es noch alternative Wege zum Einbau von benutzerdefinierten Tempalte-Tags gibt, welche ich übersehen habe. Das Anlegen eines Filters im Bereich des
objects
-Arrays fand ich passend.Unabhängig von den genannten Fragen:
Refactoring: Aktuell können wir versch. Custom-Post-Type Objekte (z.B. Booking-Objekt), WP_User oder WP_Post abfragen. Im Code werden diese Objekte (und deren Instanziierung) teilweise missbraucht um so Daten in die E-Mail-Templates zu bekommen. Das finde ich unsauber und es könnte ein Refactoring vertragen. Sonst werden weiterhin inkonsitent verwendete Objekte instanziert und es verfestigen sich Code-Strukturen, welche die Lesbarkeit und Wartbarkeit beeinträchtigen. Hierzu vielleicht ein eigenes Issue?
Bei der Verallgemeinerung des Anwednungsfalls, also hin zu einer Schnittstelle zur Bereitstellung von Template-Tags, sind der Kreativität ja keine Grenzen gesetzt. So könnte das Plugin für simple Contributions geöffnet werden, welche im besten Fall als einzelne Abhängigkeiten nur den Filter hätten. Diese Contributions könnten dann entweder als Teil des Cores veröffentlicht werden oder aber über eigene Plugins.
Anpassung im Message Typ
Folgende Anpassung ist im Message-Typ vorzunehmen, um den Mail-Objects-Filter nutzen zu können. Das beipsiel im phpdoc String nutzt den hack über das WP_User Objekt, um Daten im Template zu erhalten.
The text was updated successfully, but these errors were encountered: