CodeLAB
на главную карта сайта обратная связь

Популярные задачи:

#Загрузчик классов. (44596 hits)
#Рисование 3D объекта. (36177 hits)
#Сапер. (54823 hits)
#Улучшение быстрой сортировки. (79266 hits)
#Вычисление среднего, среднего отклонения, среднеквадратического отклонения и дисперсии заданной выборки. (47596 hits)
#Поверхностное клонирование. (28699 hits)
#Подсветка синтаксиса. (32519 hits)
#Овал, вписанный в прямоугольник. (39247 hits)
#"C# и платформа .NET" Эндрю Троелсен (Andrew Troelsen, "C# and the .NET platform"), листинги, код, примеры из книги, исходники. (40163 hits)
#Передача данных из основного во всплывающее-popup окно через POST. (119215 hits)
#Синус. (62472 hits)
#Последовательный поиск и его оптимизации. (45897 hits)
#Наибольший общий делитель. (195890 hits)
#Простой генератор случайных чисел. (136239 hits)
#"The Java Programming Language" Ken Arnold, James Gosling, David Holmes листинги, код, примеры из книги, исходники. (62156 hits)
#Предварительная загрузка изображений. (48419 hits)
#Обертки для массивов. (39961 hits)
#Сортировка выбором, общий подход. (74747 hits)
#Поразрядная сортировка массива подсчетом. (135060 hits)
#Посчитать количество пар чисел (number of equal pairs). (8117 hits)


Главная >> Каталог задач >> Разное >> Шаблоны >>

Обработка шаблонных писем

Aвтор:
Дата:
Просмотров: 58806
реализации(php: 1шт...) +добавить

Допустим вы пишете какую-нибудь систему, одной из функцией которой должна быть рассылка уведомлений/сообщений/e-mail писем для своих пользователей.

И в классе/пакете/модуле ответственным за данную функцию Вам нужно будет на основе каких-то посчитанных, выбранных данных сформировать текст этого шаблонного письма.

Например, Вам нужно уведомить каждого пользователя о том, что его заказ на конкретный товар был успешно выполнен, с его счета снято столько-то денег и произошли все эти знаменательные события такого-то числа и проч. При этом нужно конечно будет деликатно обратится в этом письме к этому пользователю по его ФИО.

Не очень ленивый и обычно не очень опытный программист мог бы написать что-то вроде такого:

 неправильное формирование содержание шаблонных писем [php]  ссылка
  1. // Получаем из базы ФИО, номер заказа, название товара и проч.:
  2. list($fio, $orderId, $itemName, $price, $date) = $orderObj->GetOrderInfo();
  3.  
  4. $emailContents = 'Добрый день, уважаемый '.$fio.'!'."\n\n";
  5. $emailContents .= 'Уведомляем Вас о том, что Ваш заказ №'.$orderId;
  6. $emailContents .= 'на товар '.$itemName.' был успешно выполнен.'."\n";
  7. $emailContents .= 'С Вашего счета была снята сумма в '.$price.'$'."\n";
  8. $emailContents .= 'Дата совершения сделки: '.$date."\n";
  9.  
  10. $emailObj->SendNotification2User($emailContents);


Программа-то конечно будет отправлять вполне хорошие письма, но вот, во-первых, ее написание довольно утомляет и, во-вторых, если нужно будет модифицировать это содержимое - придется опять лезть в исходный код, изменять его, заново компилировать всю программу/этот модуль (для соответствующих языков).

Более элегантное и правильное решение заключается в использовании текстового шаблона, содержащего все необходимые слова и места для вставки соответсвующих переменных. Одним словом, 1)делаем файл например такого вида(пусть он называется report.txt к примеру):
---------------------------------------------------------------
Добрый день, уважаемый {fio}!

Уведомляем Вас о том, что Ваш заказ №{num} на товар {item} был успешно выполнен.
С Вашего счета была снята сумма в {price}$.
Дата совершения сделки: {date}
---------------------------------------------------------------

2)В программе читаем его содержимое и..
3)Меняем в нем ссылки на поля данных - на значения соответствующих переменных.

В итоге получаем очень простой код:

 пример формирования шаблонного содержимого [php]  ссылка
  1. // Получаем из базы ФИО, номер заказа, название товара и проч.:
  2. list($fio, $orderId, $itemName, $price, $date) = $orderObj->GetOrderInfo();
  3. $emailContents = file_get_contents('report.txt');
  4.  
  5. /* данная php-функция заменит в переменной строке
  6. $reportFileContents все элементы первого массива на
  7. соответствующие элементы второго массива
  8. */
  9. $emailContents = str_replace(array( '{fio}',
  10. '{num}',
  11. '{item}',
  12. '{price}',
  13. '{date}'),
  14. $fio,
  15. $orderId,
  16. $itemName,
  17. $price,
  18. $date),
  19. $emailContents);
  20.  
  21. $emailObj->SendNotification2User($emailContents);


В итоге мы, во-первых, отделили данные представления от бизнес логики модуля программы, во-вторых, упростили поддержание, модификацию текста данного уведомления, в-третьих, в случае компилируемых языков - таким образом отпадает необходимость повторно компилировать данный фрагмент кода после каких-либо изменений в тексте сообщения. 

Реализации:

php(1)   +добавить

1) функции для формирования шаблонных текстов на php, code #76[автор:this]