私はPHP / MYSQL SaaSアプリを作成しており、現在(Swiftを使用して)電子メール機能に取り組んでいます。メールテンプレートをMySQLデータベースに保存する予定です(各テナントはそれらをカスタマイズできます)。ただし、テンプレートに動的データを含める必要もあります(名や姓などの「タグのマージ」)。単に{$test}
DBに保存しようとしましたが、うまくいきませんでした。MySQLからデータをプルして変数をテキストにマージした後、Swiftに渡す前に何かする必要がありますか?
私はSwiftライブラリに精通していませんが、ドキュメントを一目見ただけでは、変数を挿入するためのメッセージの解析については何もわかりませんでした。つまり、自分でそれを行う必要があるでしょう。
それを行う1つの方法は、メッセージ内の変数の位置を保持するための独自の(任意の)構文を考え出すことです。たとえば、{%VAR_NAME%}
何かを使用したい場合があります。
したがって、次のようにテンプレートを保存できます。
こんにちは{%recipient_name%}、
これは、請求書#{%invoice_num%}が{%invoice_date%}の時点で利用可能であることを通知するためのものです。
ありがとう、{%sender_name%}
そして、テンプレートがに格納されていると仮定すると$email_body
、文字列の置換を行うことができます(、、str_replace()
またはのようなものpreg_replace()
。この単純なものについては、正規表現検索で物事を詰め込むことはお勧めしません)。以下は、それを実行する方法の例です。$search
と$replace
配列は好きなように作成できますが、人間が読めるようにこのようにレイアウトしました。
// Original body:
$email_body = "Hello {%recipient_name%},
This is to inform you that invoice #{%invoice_num%} is available as of {%invoice_date%}.
Thank you, {%sender_name%}";
// Easily readable input values
$values = array(
'recipient_name' => $db_value['recipient_name'],
'invoice_num' => $db_value['invoice_num'],
'invoice_date' => date("Y-m-d"),
'sender_name' => $_SESSION['user_name']
);
// Break it up into the search and replace arrays
$search = array();
$replace = array();
foreach ($values AS $index => $value)
{
$search[] = "{%" . $index . "%}"; // Wrapping the text in "{%...%}"
$replace[] = $value;
}
// Do the replacement
$email_body = str_replace($search, $replace, $email_body);
ここでの主なアイデアは、プレースホルダーを特定の構文(たとえば{%VALUE%}
)で実際の値に置き換えることです。$ search変数と$ replace変数をどのように生成するかはあなた次第です。
これは次のようなものを出力します:
こんにちはフー、
これは、請求書#123456が2017-05-19の時点で利用可能であることを通知するためのものです。
ありがとう、バー
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加