2016-10-05 13 views
0

これを正しく行うかどうか、またはそれが可能であるかどうかはわかりません。基本的には、変数$ cascadeTypeの値に応じて、テーブル<td>の背景色を変更するだけです。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のコードである場合:変数$ cascadeTypeを格納するための試みにおいて

$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__)); 

、次のコードに見られるように、私は$ _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

@シンクロ、ご覧いただきありがとうございます。私は私の質問に変更を加えました。希望が役立ちます。 –

答えて

1

普通のHTMLが期待される方法MsgHTMLを使用しています。しかし条件付きのPHPコードを与えています。このPHPコードは決して評価されないため、条件は機能しません。

evalを使用してテンプレートのコンテンツを実行し、その出力を取得しようとするかもしれませんが、実際にはテンプレートで少ししか置き換えないものが必要な場合はtemplaterの使用を検討するべきです。たとえば、小枝のtemplaterを見てください - http://twig.sensiolabs.org/

更新: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(); 

次に両方の例では、重要なトリックがob_*機能であるMsgHTML

$html変数を使用します。このような

何か。ob_start()はPHPコードの出力のキャプチャを開始し、ob_get_clean()はそれを停止し、返されたすべてを返します。これらの機能に関する文書を確認してください。また、eval()の例では、includeと違って、テンプレートコンテンツの周りに?><?phpを置くことが重要です。evalはPHPコンテキストでは始まりHTMLでは始まらないことに注意してください。

+0

ありがとう@astast。私は将来templaterを使うかもしれませんが、今のところ、条件文で 'eval'を使う方法を知りたいのですが。あなたは光を放つことができますか? –