2016-10-05 4 views
0

Не уверен, что я делаю это правильно или если это возможно. В принципе, мне просто нужно изменить цвет фона таблицы <td> в зависимости от значения переменной $ cascadeType.PHPMailer: Условное заявление по шаблону электронной почты

Форма, которую принимает ввод данных пользователем:

<form action="CascadeFunction.php" method="post" name="cascader" id="cascader" enctype="multipart/form-data"> 
<label><span class="required">*</span>CASCADE TYPE</label><br /><br /> 
<label for="Release" class="radioitem">RELEASE 
    <input type="radio" name="cascadeType" value="Release" id="CascadeType_1" /></label> 
<label for="Update" class="radioitem">UPDATE 
    <input type="radio" name="cascadeType" value="Update" id="CascadeType_2" /> 
</label> 
<label for="Reminder" class="radioitem">REMINDER 
    <input type="radio" name="cascadeType" value="Reminder" id="CascadeType_3" /></label> 
<label for="Information" class="radioitem">INFORMATION 
    <input type="radio" name="cascadeType" value="Information" id="CascadeType_4" /></label> 
<input class="btn btn-primary" name="Submit" type="submit" id="submit" value="POST &amp; CASCADE" /> 
</form> 

Представленные данные из приведенной выше формы затем получает обработанные с помощью файла CascadeFunction.php. Где его PHPMailer код для отправки электронной почты является:

$mail->IsHTML(true); // This tells the PhPMailer that the messages uses HTML. 
$mail->MsgHTML(str_replace('%cascadeType%', $CascadeType, file_get_contents('emailtemplates/emailtemplate.php')), dirname(__FILE__)); 

В попытке сохранить переменную $ cascadeType, я попытался с помощью _SESSIONS $, как показано на следующем коде:

<?php 
// starting the session 
session_start(); 
if (isset($_POST['Submit'])) { 
$_SESSION['cascadeType'] = $_POST['cascadeType']; 
} 
?> 

Затем доступ к сессии в шаблон электронной почты (emailtemplate.php) с помощью кода:

<?php 
// starting the session 
session_start(); 
?> 

Затем в шаблоне электронной почты (emailtemplate.php), используется условное выражение ниже.

<tr> 
    <?php if ($_SESSION['cascadeType'] = "Information") : ?> 
    <td style="text-align:center; color:#FFF; background-color:#093; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php elseif ($_SESSION['cascadeType'] = "Update") : ?> 
    <td style="text-align:center; color:#FFF; background-color:#09F; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php elseif ($_SESSION['cascadeType'] = "Reminder") : ?> 
    <td style="text-align:center; color:#FFF; background-color:#F00; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php else : ?> 
    <td style="text-align:center; color:#FFF; background-color:#6C3; margin:10px; padding:10px 5px;" width="20%"> 
     <h4 style="font-weight:bold;">%cascadeType%</h4> 
    </td> 
    <?php endif ; ?> 
<td style="color:#337AB7; text-align:right; padding-right: 20px;" width="80%"> 
<h3 style="margin-bottom:2px;">TARGET AUDIENCE</h3> 
<p style="margin-top:2px;">%targetAudience%</p> 
</td> 

Выход электронной почты просто отображает всю таблицу <td> и, видимо, не работает. Пожалуйста, сообщите, как лучше всего подойти к ситуации, если условные заявления действительно не будут работать в шаблоне электронной почты.

+0

Вы не говорите, как вы загружаете/запускаете это. – Synchro

+0

@Synchro, Спасибо за просмотр. Я внес изменения в свой вопрос. Надеюсь, это поможет. –

ответ

1

Вы используете метод MsgHTML, который, кажется, ожидает простой HTML. Но вы даете ему некоторый код PHP с условиями. Этот код PHP никогда не оценивается, поэтому условия не работают.

Вы можете попытаться запустить содержимое шаблона с помощью eval и получить его вывод, но на самом деле вам стоит подумать об использовании шаблона, если вам понадобится нечто большее, чем простое замещение в шаблонах. Посмотрите на Twig Templater, например - http://twig.sensiolabs.org/

Update:

Re с помощью Eval. Прежде всего, я должен сказать, что это может быть небезопасно, если вы не очень осторожны в том, что именно выполняется код.

Идея состоит в том, чтобы прочитать содержимое шаблона (по существу, код HTML + PHP) в переменной PHP, определить некоторые другие переменные, которые используются в шаблоне, а затем использовать функцию PHP eval для запуска этого кода.

Что-то вроде этого:

$template = file_get_contents('emailtemplates/emailtemplate.php'); 
$html = eval('ob_start(); ?>' . $template . '<?php return ob_get_clean();'); 

Или даже это

ob_start(); 
require('emailtemplates/emailtemplate.php'); 
$html = ob_get_clean(); 

Затем используйте переменную $html в MsgHTML

Важный трюк в обоих примерах является ob_* функции.ob_start() начинает отсчет вывода кода PHP, а ob_get_clean() останавливает его и возвращает все, что было возвращено. Проверьте документацию по этим функциям. Также обратите внимание, что в примере с eval() важно разместить ?> и <?php вокруг содержимого шаблона в отличие от include, eval запускается в контексте PHP, но не в HTML.

+0

Спасибо @astax. Я могу использовать templater в будущем, но на данный момент я хотел бы знать, как я могу использовать 'eval' с условным выражением. Можете ли вы пролить свет? –

Смежные вопросы