Имам функция, която изпраща имейли на сайта (използвайки phpmailer), това, което искам да направя, е основно php да замени всички placheholders във файла email.tpl със съдържание, което го подавам. Проблемът за мен е, че не искам да повтарям код, затова създадох функция (по-долу).
Без php функция бих направил следното в скрипт
// email template file
$email_template = "email.tpl";
// Get contact form template from file
$message = file_get_contents($email_template);
// Replace place holders in email template
$message = str_replace("[{USERNAME}]", $username, $message);
$message = str_replace("[{EMAIL}]", $email, $message);
Сега знам как да направя останалото, но съм заседнал на str_replace()
, както е показано по-горе, имам множество str_replace()
функции за заместване на контейнерите в имейл шаблона. Това, което бих искал, е да добавя str_replace()
към моята функция (по-долу) и да я накарам да намира всички екземпляри на [\]
в шаблона за имейл, който й давам, и да я заменя със стойностите на заместителите, които ще й дам по следния начин: str_replace("[\]", 'replace_with', $email_body)
Проблемът е, че не знам как бих предал множество контейнери и техните заместващи стойности в моята функция и ще накарам str_replace("[{\}]", 'replace_with', $email_body)
да обработи всички контейнери, които му давам, и да ги заменя със съответните стойности.
Тъй като искам да използвам функцията на множество места и за да избегна дублиране на код, на някои скриптове може да предам на функцията 5 контейнера и там стойности, а друг скрипт може да трябва да предаде 10 контейнера и там стойности към функцията, за да използва в шаблона за имейл.
Не съм сигурен дали ще трябва да използвам масив an в скрипта(овете), който ще използва функцията и for
цикъл във функцията, може би за да накарам моята php функция да приема xx контейнери и xx стойности от скрипт и за да преминете през контейнерите и да ги замените с там стойности.
Ето моята функция, която споменах по-горе. Коментирах скрипта, което може да обясни много по-лесно.
// WILL NEED TO PASS PERHAPS AN ARRAY OF MY PLACEHOLDERS AND THERE VALUES FROM x SCRIPT
// INTO THE FUNCTION ?
function phpmailer($to_email, $email_subject, $email_body, $email_tpl) {
// include php mailer class
require_once("class.phpmailer.php");
// send to email (receipent)
global $to_email;
// add the body for mail
global $email_subject;
// email message body
global $email_body;
// email template
global $email_tpl;
// get email template
$message = file_get_contents($email_tpl);
// replace email template placeholders with content from x script
// FIND ALL INSTANCES OF [{}] IN EMAIL TEMPLATE THAT I FEED THE FUNCTION
// WITH AND REPLACE IT WITH THERE CORRESPOING VALUES.
// NOT SURE IF I NEED A FOR LOOP HERE PERHAPS TO LOOP THROUGH ALL
// PLACEHOLDERS I FEED THE FUNCTION WITH AND REPLACE WITH THERE CORRESPONDING VALUES
$email_body = str_replace("[{\}]", 'replace', $email_body);
// create object of PHPMailer
$mail = new PHPMailer();
// inform class to use smtp
$mail->IsSMTP();
// enable smtp authentication
$mail->SMTPAuth = SMTP_AUTH;
// host of the smtp server
$mail->Host = SMTP_HOST;
// port of the smtp server
$mail->Port = SMTP_PORT;
// smtp user name
$mail->Username = SMTP_USER;
// smtp user password
$mail->Password = SMTP_PASS;
// mail charset
$mail->CharSet = MAIL_CHARSET;
// set from email address
$mail->SetFrom(FROM_EMAIL);
// to address
$mail->AddAddress($to_email);
// email subject
$mail->Subject = $email_subject;
// html message body
$mail->MsgHTML($email_body);
// plain text message body (no html)
$mail->AltBody(strip_tags($email_body));
// finally send the mail
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent Successfully!";
}
}