У меня есть простой класс Email(). Он используется для отправки писем с моего сайта.
<?
Email::send($to, $subj, $msg, $options);
?>
У меня также есть куча шаблонов электронной почты, написанных на простом HTML, пронизанном несколькими переменными PHP. Например. /inc/email/templates/account_created.php
:
<p>Dear <?=$name?>,</p>
<p>Thank you for creating an account at <?=$SITE_NAME?>. To login use the link below:</p>
<p><a href="https://<?=$SITE_URL?>/account" target="_blank"><?=$SITE_NAME?>/account</a></p>
Чтобы отобразить переменные PHP, мне пришлось include
интегрировать шаблон в свою функцию. Но так как include
не возвращает содержимое, а просто отправляет его прямо на выход, мне пришлось обернуть его функциями буфера:
<?
abstract class Email {
public static function send($to, $subj, $msg, $options = array()) {
/* ... */
ob_start();
include '/inc/email/templates/account_created.php';
$msg = ob_get_clean();
/* ... */
}
}
После этого я понял, что переменные PHP не отображаются, поскольку они находятся внутри области действия функции, поэтому мне пришлось глобализовать переменные внутри шаблона:
<?
global $SITE_NAME, $SITE_URL, $name;
?>
<p>Dear <?=$name?>,</p>
...
Итак, вопрос в том, есть ли более элегантное решение для этого? В основном меня беспокоят мои обходные пути с использованием ob_start()
и global
. Почему-то мне это кажется странным. Или это довольно распространенная практика?