In dieser Übung geht es darum, eine Datei einzulesen, und als Vorlage für einen versendeten Newsletter zu nutzen. Hierzu benötigst Du eine HTML Datei mit Platzhaltern und eine Callback-Funktion für das Ersetzen der Platzhalter. Die Übung ist bewusst so aufgesetzt, dass Du mit "simulierten" Schnittstellen arbeiten kannst, das heisst, Du musst kein Formular haben, um mit Daten zu arbeiten, die später aus einem Formular kommen, etc. An diesen Punkten wird erwähnt, wofür die simulierten Schritte stehen.
- Öffne dafür die Übung Massen-Emailversand, falls du sie schon hast. Falls nicht, kannst Du die beiden auch später kombinieren, und hier nur die Funktion schreiben / testen.
- Lade das newsletter-template herunter. Speichere den Inhalt dieser HTML-Datei als String in eine Variable. Dies Simuliert das eingelesene Template - später kann dieser Schritt durch das Einlesen mittels fopen() / fread() ersetzt werden.
- Schreibe die Platzhalter in den geschweiften Klammern, welche im Template vorkommen, als Schlüssel in ein Array mit dem Namen $post mit jeweils einem Wert, den Du selbst wählen kannst. Also aus {title} wird $post['title] etc. Dies simuliert Daten, die Du später mittels einem Formular abschicken kannst, um den Newsletter bequem über das Web zu erstellen. (dann ersetzt Du $post mit $_POST)
Für das Datum schreibst Du natürlich keinen fixen Wert, sondern ein Datum mit strftime(), damit es dynamisch ist. - Nun hast Du also eine Vorlage als String und eine Liste mit Ersetzungswerten im Array $post. Für das Ersetzen der Platzhalter kann man nun mit der Funktion preg_replace_callback() arbeiten. Führe diese Funktion in Deinem Script aus mit der folgenden Regulären Ausdruck: '/{(.*?)}/', dem Namen replaceTags für Deine Callback-Funktion (die Du noch schreiben wirst) und der Variable, in der der Template-String enthalten ist. Das Resultat speicherst Du in die Variable $newsletter. Diese Zeile ist wichtig, damit Du die Callback-Funktion überhaupt testen kannst.
- Schreibe nun die Callback-Funktion replaceTags() für das Ersetzen, die Du preg_replace_callback() mitgegeben hast. replaceTags() braucht einen einzigen Parameter, in dem preg_replace_callback() die Treffer mitgeben kann. In der Funktion wirst Du auf das Array mit den Ersetzungen zugreifen. Weil Du hier nicht frei über Parameter arbeiten kannst, musst Du diese Variable global setzen.
- Nun kannst Du $newsletter mit echo ausgeben. Wenn Du möchetst, kannst Du diese Variable nun als Email-Body für die Funktion mail() verwenden, um diesen Newsletter an jemanden zu schicken.
Tipps
- Beispiele für die Callback-Funktion und den Aufruf findest Du auf PHP.NET unter der Funktionsbeschreibung von preg_replace_callback().
- Wenn Du diesen Code innerhalb einer Schleife verwendest, mit der Du durch ein Array von Newsletter-Empfängern durchgehst, kannst Du den Newsletter an beliebig viele Personen versenden. Achte dabei darauf, dass die persönliche Ansprache, die Du im Array mit den Ersetzungen eingibst, nun aus dem Empfänger-Array kommt.