метод создания шаблонов PHP (т. е. html с переменными)?

Я разрабатываю свои 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, но не писать так вот так?

Solutions Collecting From Web of "метод создания шаблонов PHP (т. е. html с переменными)?"

Вы пытались использовать синтаксис 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>