Я разрабатываю свои html-письма, это должен быть блок html, содержащий переменные, которые я могу хранить в переменной $ template.
Моя проблема связана с хранением в переменной части. ставя все мои html в php, это заставляет боль в заднице работать.
например, приведенный ниже код отлично подходит для простого письма, но как только я начну получать вложенные таблицы и т. д., это будет действительно запутывать …
$template.= 'Welcome ' . $username . '<br /><br /><br />'; $template.= 'Thank-you for creating an account <br /><br />'; $template.= 'Please confirm your account by click the link below! <br /><br />'; $template.= '<a href="' . $sitepath . '?email=' . $email . '&conf_key=' . $key . '" style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A">' . $key . '</font></a>'; $template.='</body></html>';
есть способ, которым я могу хранить html в $ var, но не писать так вот так?
Вы пытались использовать синтаксис heredoc ?
$template = <<<TEMPLATE Welcome $username <br/><br/> ... </body></html> TEMPLATE;
Для писем я большой поклонник шаблонов на основе файлов и действительно простой парсер шаблонов. Одно из преимуществ этого заключается в том, что клиенты и эксперты домена могут читать и даже редактировать текст. Другое дело, что вы не полагаетесь на переменную область, например, с heredoc. Я делаю что-то вроде этого:
Текстовый файл с шаблоном электронной почты:
Welcome, [Username] Thank you for creating an account. Please ... etc.
Код клиента PHP:
$templateData = array ('Username'=>$username...); // get this from a db or something in practice $emailBody = file_get_contents ($templateFilePath);// read in the template file from above foreach ($templateData as $key => $value){ $emailBody = str_replace ("[$key]", $value, $emailBody); }
Конечно, у вас будут проблемы, если ваша электронная почта должна содержать текст [Имя пользователя], но вы можете придумать свое собственное соглашение о псевдокоде. Для html или более сложных писем с такими вещами, как циклы и условия, вы можете расширить эту идею, но проще и безопаснее использовать механизм шаблонов. Мне нравится PHPTAL, но он отказывается делать простой текст.
EDIT: для электронной почты вам, вероятно, нужна текстовая версия, а также версия HTML. Использование функций или методов для загрузки файлов и замена, тем не менее делает добавление второго формата довольно безболезненным.
<?php ob_start(); ?> Welcome <?= $username ?><br /><br /><br /> Thank-you for creating an account <br /><br /> Please confirm your account by click the link below! <br /><br /> <a href="<?= $sitepath ?>?email=<?= $email ?>&conf_key=<?= $key ?>" style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A"><?= $key ?></font></a> </body></html> <?php $template = ob_get_content(); // to output the data: ob_end_flush(); // or echo $template; // or whatever you want to do else with `$template`
См. http://www.php.net/manual/en/ref.outcontrol.php для получения дополнительной информации по этому вопросу
Обновление: (Кредиты для Ycros )
template_file.php:
<html><head></head><body> Welcome <?= $username ?><br /><br /><br /> Thank-you for creating an account <br /><br /> Please confirm your account by click the link below! <br /><br /> <a href="<?= $sitepath ?>?email=<?= $email ?>&conf_key=<?= $key ?>" style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A"><?= $key ?></font></a> </body></html>
some_library_file.php
<?php function load_template_to_string($file_name) { ob_start(); include $file_name; return ob_get_content(); }
в скрипте, где вы хотите загрузить этот шаблон:
$template = load_template_to_string('template_file.php');
вы можете использовать двойную кавычку, Heredoc или Newdoc.
например (строки с двойными кавычками):
$template.= "Welcome $username <br /><br /><br /> Thank-you for creating an account <br /><br /> Please confirm your account by click the link below! <br /><br /> <a href='${sitepath}?email=${email}&conf_key='$key' style="color: #03110A;"><font size='5' font-family="Verdana, Geneva, sans-serif" color='#03110A'>${key}</font></a> </body></html>";
или (Heredoc)
$template = <<<EOL Welcome $username <br /><br /><br /> Thank-you for creating an account <br /><br /> Please confirm your account by click the link below! <br /><br /> <a href='${sitepath}?email=${email}&conf_key='$key' style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A">${key}</font></a> </body></html> EOL;
См. http://php.net/manual/en/language.types.string.php. Для разных методов обработки переменных в строках.
Не привязывайте шаблон к PHP. Возможно, вам придется поддерживать тот же шаблон на других платформах в будущем.
Что мы делаем, так это то, что мы используем команду echo SSI (Server Side Include) для ввода переменных в HTML. Если у вас нет поддержки SSI, вы можете просто заменить vars на PHP регулярными выражениями. Шаблон выглядит так:
<h1>Welcome <!--#echo var="USERNAME" -->,</h1>
Где USERNAME – это имя переменной. Это выглядит более подробным, чем просто размещение PHP-шаблонов в шаблоне, но в долгосрочной перспективе вы выиграете.
Если вы не против использования фреймворка для этого, перейдите на Zend_View .
С Zend_View вы можете писать свои шаблоны в чистом PHP, а также с множеством помощников для генерации вывода HTML.
Вы также можете использовать функции include () и extract ( ) для создания собственного механизма шаблонов:
$model = array('foo' => 'bar', 'baz' => array('bat', 'qux')); extract($model); include('template.php');
<p><?php echo $foo ?></p> <ul> <?php foreach ($baz as $item) : ?> <li><?php echo $item ?></li> <?php endforeach; ?> </ul>