2016-08-01 28 views
-1

我正在接收JSON數據的webhook項目,我將發送基於JSON的電子郵件通知。我已經完成了JSON的所有排序。我知道如何通過PHP發送HTML電子郵件,但我迷失在如何構建如此龐大的電子郵件。在PHP中爲HTML電子郵件組合大字符串

我需要使用一些邏輯來構建HTML電子郵件的某些部分。但我知道,因爲我試圖用一個變量中的如果聲明這樣的事情會失敗......

$email = $vendorEmail; 
    $email_subject = "Order Slip "; 
    $email_message = ' 
        <table style="width:100%;"> 
         <tbody> 
         <tr> 
          <td style="width:33%;"> 
          <h5>Bill To:</h5> 
          <p style="font-size: 14px;"> 
           <strong>' . $orderInfo->billing_address->first_name . ' ' . $orderInfo->billing_address->last_name . '</strong><br/> 
           ' . if(isset($orderInfo->billing_address->company)){$orderInfo->billing_address->company };. '<br> 
           ' . $orderInfo->billing_address->address1 . '<br/> 
           ' . $orderInfo->billing_address->address2 . '<br/> 
          </p> 
          </td> 

這是我的整個電子郵件的一小部分。電子郵件中的邏輯將變得更加複雜。一個例子是運行語句來運行完成訂單的所有行項目。

是否有創建更大更復雜的HTML電子郵件的標準方式?或者,如果沒有,有沒有人有更好的方法來解決這個問題的建議?

+0

您的代碼更改爲使用PHP作爲模板語言。我認爲這很容易。 https://eval.in/615346 –

回答

2

你的問題不是關於撰寫電子郵件,而是關於合併較大的字符串 - 它可能有助於更好地重新命名該問題,以便它吸引「正確」的答案。

如果你唯一的問題是在變量中使用if/else,你可以使用兩種方法。

首先使用正常的,如果使用所述。=操作者

$string = 'xxx' 
if($a) { 
    $string .= 'yyy'; 
} 
else { 
    $string .= 'zzz'; 
} 

,或者使用三元運營商直截了當一氣呵成定義變量添加到一個可變/ else子句。第二個選項的輸出與第一個選項完全相同。

$string = 'xxx' . ($a ? 'yyy' : 'zzz'); 

Ofc你可以結合這兩種方法。

更多關於三元運營商:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary


編輯: 把它的來龍去脈,你的代碼應該是這樣的(三元的做法,我會建議在這段代碼)

$email = $vendorEmail; 
$email_subject = "Order Slip "; 
$email_message = ' 
    <table style="width:100%;"> 
     <tbody> 
      <tr> 
       <td style="width:33%;"> 
        <h5>Bill To:</h5> 
        <p style="font-size: 14px;"> 
         <strong>' . $orderInfo->billing_address->first_name . ' ' . $orderInfo->billing_address->last_name . '</strong><br/> 
         ' . ((isset($orderInfo->billing_address->company) ? $orderInfo->billing_address->company : NULL). '<br> 
         ' . $orderInfo->billing_address->address1 . '<br/> 
         ' . $orderInfo->billing_address->address2 . '<br/> 
        </p> 
       </td> 

編輯2: 當處理真的很大 HTML st戒指我也使用輸出緩衝的方法,你可能會發現它也很有用。然後

<?php 
ob_start(); 
$phpVariables = phpVariables 
?> 
HERE GOES LARGE HTML, <?=$phpVariables?>, or <?php echo 'chunks of PHP that output stuff'?> 
<?php 
$string = ob_get_clean(); 
?> 

$字符串將是 「在這裏不用大的HTML,phpVariables,或者PHP是輸出的東西塊。」

當然,您可以使用普通的php代碼,包括輸出中的if/else。

如果你想,雖然使用這種方法,我建議你先熟悉輸出緩衝http://us2.php.net/manual/en/function.ob-start.php

+0

感謝您提出改變問題的建議。它已被編輯,希望其他人能夠使用您的有用信息! – Brendin

+0

@brendin如果我的答案幫助你解決了問題,請將其標記爲「已接受的答案」。如果沒有,請讓我知道還有什麼你不明白,所以我可以幫你;) – Kalko

+0

@Brendin我編輯了我的答案,並添加了一個選項,可能對你有用 - 輸出緩衝。 – Kalko

0

您可以使用if語句在你的大字符串,但使用較短的版本,例如:

echo "-text-" . ▼         ▼ 
    "Name: " . ((isset($name)) ? $name : "") . 
    "-text-"; 

當使用這個「short if」時,記得把它全部放在圓括號中(用箭頭▼指出)。現在,在你的代碼,替換當前if

if(isset($orderInfo->billing_address->company)){$orderInfo->billing_address->company }; . 

由:

((isset($orderInfo->billing_address->company)) ? $orderInfo->billing_address->company : "") . 
相關問題