#php #html #css
#php #HTML #css
Вопрос:
У меня есть шаблон электронной почты, который находится внутри PHP-скрипта. Я использую PHPMailer, и отправленное сообщение сохраняется в вызываемой переменной $msg
.
Как я могу настроить $msg
, чтобы он включал файл шаблона электронной почты? Я надеюсь, что есть способ сделать это динамически с помощью включаемого файла, чтобы мне не приходилось хранить 20 копий шаблона в разных сценариях.
Ответ №1:
У вас есть несколько подходов, три из которых я упомяну ниже.
Решение № 1 — простое включение
Прежде всего, если вы включаете файл, как в следующем примере:
include('myfile.php');
его код будет выполнен точно так же, как если бы он был вставлен вместо вышеупомянутой строки. Таким образом, если вы добавите объявление значения myfile.php
, переменная будет доступна сразу после include()
вызова функции (упомянуто выше).
Итак, в принципе, вы можете сделать что-то подобное в myfile.php
file:
<?php
$msg = 'my template';
и используйте $msg
переменную в любом месте после include()
вызова в основном файле (если переменная не была перезаписана).
Решение № 2 — включение с использованием return
Для использования в некоторых случаях, например. если вы включаете только файлы, содержащие некоторые значения, которые вы хотите использовать (основная цель файла — предоставить некоторое значение для обработки), вы можете использовать следующий пример. Это не должно мешать вашим текущим переменным (при правильном использовании).
В главном файле:
$msg = include('myfile.php');
и в myfile.php
файле:
<?php
return 'my template';
Таким образом, ваш файл работает только путем возврата определенной переменной и не нарушает соглашение об именовании других ваших файлов. Кроме того, вы можете вызывать переменную так, как вам нравится, без необходимости изменять содержимое файла конфигурации.
Решение № 3 — буферизация вывода
В некоторых случаях (беспорядочное кодирование, HTML и т. Д.) Вам может потребоваться использовать это решение. Следующий код улавливает все, что передается файлом, и сохраняет его в переменную $msg
, затем отключает буферизацию.
ob_start();
include('myfile.php');
$msg = ob_end_flush();
Таким образом, если у вас есть, например. echo
вызовы или некоторый статический HTML-код во включенном файле не будут записаны «как есть» и могут быть обработаны дополнительно (например. некоторые токены из вашего шаблона могут быть заменены фактическими данными, которые вы хотите использовать).
Итак, в принципе, в этом случае вы даже можете написать myfile.php
что-то вроде:
<?php
echo 'my template';
или даже:
my template
(просто текст, а не код PHP).
Комментарии:
1. Пожалуйста, никогда не делайте # 2. Это кажется разумным, вплоть до тех пор, пока ваш код не нуждается в изменении, чтобы выполнить некоторые вычисления относительно того, что возвращать. Внезапно вы сталкиваетесь с попыткой выбрать имена переменных, которые не будут конфликтовать, и кодированием вокруг переопределений функций (исходя из недавнего опыта)
2. @PhilLello: возможно, вы не знаете, но это обычная практика для файлов конфигурации, например. в некоторых зрелых фреймворках PHP. Таким образом, я все еще предлагаю использовать это решение. Кроме того, расчет того, что возвращать в качестве параметра конфигурации, кажется основной ошибкой — на мой взгляд, параметры конфигурации не должны зависеть от некоторых сложных вычислений (скорее наоборот), и решение № 2 обеспечивает это (частично).
3. О, поверьте мне, я знаю. Я тоже был укушен этим. Подумайте, что происходит, когда вы выполняете миграцию между фреймворками и хотите использовать несовместимые форматы файлов конфигурации. Изменить реализацию функции для чтения общего файла и возврата ожидаемого формата просто; исправление каждого места, включающего конфигурацию, требует больше обслуживания и имеет более высокую вероятность ошибки. Или даже при использовании одной платформы вы можете захотеть поменять механизм резервного копирования на config — возможно, INI-файлы, возможно, XML, возможно, результаты запроса к базе данных.
Ответ №2:
Не уверен, правильно ли я вас понимаю, но почему вы не можете просто сделать это?
include_once('filename.php');
Ответ №3:
Вы можете написать в своем файле шаблона:
$msg = """ the message
bla bla bla""";
Затем, когда вы включаете файл из другого модуля php, вы можете получить доступ к этой переменной.
Ответ №4:
Вы можете иметь $msg = "…";
в скрипте PHP и включать это там, где это необходимо. Однако, если это просто обычный текст, вы можете рассмотреть возможность сохранения его в виде .txt
файла и использования file_get_contents
.
Ответ №5:
Вы можете либо сохранить его в необработанный текстовый файл и загрузить его с помощью file_get_contents, либо сохранить строку с текстом в другом php-файле и включить ее.
Пример:
Template.php:
<?php
$globalMessage = "template string goes here";
?>
Любой другой файл:
<?php
include 'Template.php';
echo $globalMessage; // has access
?>
Ответ №6:
Если вы хотите получить содержимое файла шаблона в переменную $ msg, вы можете сделать следующее:
<?php
$msg= get_include_contents('email_template_file.php');
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
?>
Теперь ваша переменная $ msg содержит текст вашего электронного письма. Если у вас есть некоторые общие термины, такие как имя пользователя, номер телефона и т. Д., Вы хотите быть разными для разных пользователей. Храните их в токенах, таких как {username}, {phone-number} в вашем файле шаблона. Как только вы получите содержимое в переменной $ msg, вы можете использовать следующее:
<?php str_replace('{username}',$username,$msg); ?>
для динамического изменения значений для каждого пользователя, которому вы хотите отправить почту.