1

編集:たぶん私はこの部分を明確にする必要があります。ユーザーがテンプレートを作成しています。ですから、構文を単純にしたいのですが、強力なテンプレートエンジンでは信頼できません。

したがって、条件付きロジック(簡単ではない)でトークン(簡単)を使用して、電子メールを作成するために使用されるテンプレートエンジンが必要です。

例:Hello{if first_name} dear {first_name}{endif}, blah blah blah.

first_nameが使用できない場合は、次のようになります。Hello, blah blah blah.

私はevalを使用してそれを機能させることができました...しかし、私たちは皆、evalが悪であることを知っています。

$body = preg_replace('/{if ([^{\|}]+)}/i', '<?php if(isset(\$tokens[\'$1\'])):?>', $body);
$body = preg_replace('/{endif}/i', '<?php endif;?>', $body);

誰かが私にこれに関するチュートリアルを教えてもらえますか?単純なトークンの置き換え以外には何も見つからないようです。

4

2 に答える 2

0

上で示唆したように、私はこれにMustache.jsを使用します、それはあなたが必要とするすべてを達成するはずです。「トークン置換と条件付きロジック」だけが必要な場合は、Mustacheを使用して次の両方を提供できます。

トークン置換

Hello {{first_name}}

条件付きロジック

Mustache.jsは、「ロジックレス」と自称していますが、

ifステートメント、else句、またはforループがないため、これを「ロジックレス」と呼びます。

コントローラでロジックベースの決定を行い、それらの決定をビューに渡すことができます。mustache.jsでif / elseを実行するにはどうすればよいですか?を参照してください。。したがって、あなたの場合、このようなものが機能するはずです:

function( view ){

   if ( logged_in ) {
     var user = {
       first_name: "Jane",
       last_name: "Doe"
     };
   } else {
     var user = {
       first_name: "Buddy"
     };
   }

   // more template stuff...

}
于 2012-07-09T13:09:37.567 に答える
0

皆さんからのコメントを使用して、カスタム構文を使用して独自の安全なテンプレート エンジンをすばやく作成する方法を理解することができました。

設定されている場合は first_name 変数にしたい{first_name|buddy}が、設定されていない場合は文字列「buddy」をデフォルトとして使用するとします。

Smarty などの強力なテンプレート エンジンを使用します。Smarty はこれをサポートしていますが、構文が好きではありません{$first_name|default:"buddy"}

カスタム構文をすべて正しい構文に置き換えます

preg_replace('/{([\w\s]+)\|([\w\s]+)}/', '{\$$1|default:"$2"}', $content);

あとは Smarty で実行するだけです。これは本質的に eval を使用する場合と同じですが、安全です。みんなありがとう。

于 2012-07-10T15:00:08.900 に答える