Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[php|zend] Szablony emaili.
Biblioteka wysyłania e-maili w systemie Zend Framework jest bardzo fajnie zaprojektowana i zaimplementowana (patrz Zend_Mail). Niestety brakowało mi w niej obsługi szablonów, które spełniałyby następujące kryteria:
- Treść e-maila jest poza kodem PHP (patrz też pkt 3)
- Sparametryzowanie e-maili, czyli możliwość wysyłania tych samych e-maili różniących się tylko niektórymi wartościami (np e-mail aktywacyjny może różnić się tylko adresem aktywacyjnym)
- Wybór między źródłem treści szablonów (na przykład pliki xml, baza danych)
- Możliwość ustawiania domyślnych wartości dla pól takich jak: temat, adresat, załączniki.
Tak bardzo mi tego brakowało, iż postanowiłem tą ideę przelać na kod.. oto wynik.
Aktualnie moja biblioteka wspiera tylko pliki xml jako źródło danych, zainicjowanie odbywa się w następujący sposób (w index.php lub Bootstrap w zależności od architektury systemu):
-
‘basedir’ => ‘/mails’) // Ustaw ścieżkę do szablonów
-
);
-
// Ustaw domyślny manager
-
$mailMgr = Fasic_Mail_Template::setDefault($templateXml);
W danej chwili możemy zainicjować kilka źródeł szablonów (np z różnych katalogów), odwołujemy się do nich na podstawie nazw - szczegóły znajdują się w kodzie biblioteki.
Sposób wykorzystania w kontrolerze może wyglądać mniej więcej tak:
-
// Pobierz domyślny manager
-
$mailMgr = Fasic_Mail_Template::manager();
-
// Pobierz szablon e-maila dla aktywacji
-
$mail = $mailMgr->mail(‘activation’);
-
// Dodaj adresata, są dostępne takie same metody jak w przypadku Zend_Mail
-
$mail->addTo($email);
-
// Wyślij e-mail z odpowiednimi parametrami,
-
// pierwszym argumentem jest transport (null - domyślny)
-
‘url’ => ‘http://adres.aktywacyjny.pl/dla.tego.uzytkownika.html’
-
));
Przykładowy (z tych najprostszych) szablon mógłby wyglądać następująco (w naszym przypadku plik ten ma ścieżkę
‘/mails/activation.xml’):
-
<?xml version="1.0" encoding="UTF-8"?>
-
<email>
-
<subject> Tytuł emaila </subject>
-
<from name="Nadawca" email="adres@nadawcy.pl" />
-
<body>
-
Treść z parametrami w postaci :klucz_parametru, na przykład:
-
:url
-
</body>
-
<params>
-
<param name="url" default="http://domyslny.adres.pl" />
-
</params>
-
</email>
Jak widać korzystanie z biblioteki jest bardzo proste, na pewno nie jest nic trudniejsze niż korzystanie z “czystego” Zend_Mail. Natomiast dzięki niej zyskuje się możliwość łatwej edycji wykorzystywanych e-maili w systemie - również dzięki temu, iż e-maile te są trzymane w jednym miejscu. Dodatkowo dzięki wprowadzeniu kategorii (wspieranej przez menedżer XML) możemy bardzo łatwo wprowadzić wielojęzyczne szablony - każdy z języków z punktu widzenia biblioteki byłby osobną kategorią (’pl’, ‘en’, itp), natomiast fizycznie znajdowałby się w osobnym podkatalogu katalogu głównego (czyli ‘/mails’).
Zdaje sobie sprawę, iż do ideału jeszcze brakuje (również w samej dokumentacji ;)), ale niewątpliwie jest to dobry początek - jak zawsze uwagi i propozycje mile widziane.
Biblioteka Fasic_Mail_Template:
- Źródła: http://webprogramming.pl/downloads/Fasic_Mail.zip
- Wersja: 0.9
- Data edycji: 18 października 2009
- Instalacja: skopiować do katalogu Fasic, który jest w ścieżce poszukiwań skryptów PHP
- Zależności: korzysta z bioblioteki Zend_Mail
Napisz komentarz