Template pro php mail, oddělení designu mailu od zdrojového kódu

Oddělit html kód mailu od zdrojového kódu, který mail odesílá je vhodné z několika důvodů.


Když potřebuji, aby systém odeslal nějaký mail zákazníkovi nebo čtenáři stránek, a má obsahovat konkrétní individuální data, mám na výběr dvě možnosti.

První možnost je, že celý kód vytvářím v php skládáním textu v proměnných. Asi tak:

  1. $html ="<html><head></head><body>";
  2. $html.="<h1>".<?=$jmeno;?>."</h1>";
  3. $html.="</body></html>";

Druhá možnost je vytvořit si šablonu (template mailu). Asi tak:

  1. <html>
  2. <head></head>
  3. <body>
  4. <h1><?=$template->jmeno;?></h1>
  5. </body>
  6. </html>

Je to výhodné z mnoha důvodů: snadněji se to upravuje, testuje, vytváří, neváže se to na kód nebo konkrétní knihovny kódu, snadno se zaměňí celá zpráva, mail může dělat grafik aniž by se vyznal v php a hlavně je to klasický html soubor s php prvky. Tvoří se stejně jako jiné stránky.

Otázkou je jak dostat tuto zprávu do proměnné, abychom ji mohli odeslat mailem. Do mých knihoven na odesílání mailu jsem si vytvořil tuto funkci:

  1. function getTemplate($s, $template=null) {
  2. ob_start();
  3. require ($s);
  4. $html = ob_get_contents();
  5. ob_end_clean();
  6. return $html;
  7. }

Funkci je předávána parametrem nejdříve cesta k šabloně, která se má použít, a pak objekt s daty, který je šablonou zpracován. Výsledkem je proměnná s textem souboru, stejně jako kdybychom nechali šablonu vypsat na obrazovku.

Další využití funkcí pro kontrolu výstupu najdete v článku ProgressBar v PHP, který se zabývá problematikou informování uživatele o dlouhoběžícím skriptu.

komentáře

RSS Komentáře k článku RSS Komentáře   Add to Google
07.06.2008 15:53 | Anonym (Kcko) | Chybka?

V te funkci se vraci return $z? Nemelo by se vracet nahodou return $html? Asi preklepl

07.06.2008 17:53 | Administrátor | Re: Chybka?

pravda, díky, opraveno

08.06.2008 17:48 | Anonym (Kcko) | Bufferovani

Neni zac :), jinak tenhle clanek me uvedl v to, ze jsem si myslel ze bufferovat muzu pouze 1×

ja mam

ob_start();

stranka

ukonceni bufferu a jeho vyplivnuti

a rikal jsem si, ze bych si treba mohl ulozit nejakou tabulku do souboru abych pomohl databazi ale netusil sem ze lze takto vnorovat, je to simple. Diky za pekny clanek

21.03.2009 00:08 | Anonym (Jakub Vrána) | ob_get_clean

Místo dvojice funkcí ob_get_contents a ob_end_clean lze použít ob_get_clean. Zároveň se tím ušetří proměnná $html.

03.11.2009 00:26 | Anonym (godder) | podekovani

Jen chci podekovat za cas, ktery mi usetril Vas clanek. Diky

Jméno
Název
Text
Lze používat Texy! syntax. Příklad syntaxe: "text odkazu":odkaz, **tučně**, *kurzíva*, `code`. PHP kód uzavírejte do <?php ... ?> a JavaScript do <script> ... </script>