2

これは、より「ベストプラクティス」の質問です。

いくつかのメールテンプレートがあり、見つけて置き換える必要のあるタグがいくつかあります。

例えば:

Dear [[customername]],
Blah blah blah blah, and more blah.

Your Invoice....
----------------------------------------------------------
Order Status: [[orderstatus]]
Order Number: [[orderid]]
Date Ordered: [[dateordered]]
Payment Method: [[paymentmethod]]
Billing Statement: [[billingstatement]]

とにかく、私はこれらのタグのいくつかを二重括弧の中に持っています。だから私は単純なものを使用しています:$ text = str_replace($ oldWord、$ newWord、$ text);

これが通常の方法であると確信していますが、誰かが別の方法で考えているかどうかだけが気になります。そうでなければ、私は自分がしていることに固執します。

4

7 に答える 7

4

str_replaceで配列を使用できます。

$oldWords = array('[[customername]]',
                  '[[orderstatus]]'
                 );
$newWords = array($customerName,
                  $orderStatus
                 );

$newText = str_replace($oldWords , $newWords , $text); 

配列でpreg_replaceを使用することもできます

$oldWords = array('/\[\[customername\]\]/',
                  '/\[\[orderstatus\]\]/'
                 );
$newWords = array($customerName,
                  $orderStatus
                 );

$newText = preg_replace($oldWords , $newWords , $text); 
于 2011-02-14T16:38:49.750 に答える
1

あなたの例からははっきりとはわかりませんが、$oldWordと$newWordが(名前が示すように)文字列である場合、あなたはそれを正しく行っていません。str_replaceは配列パラメーターを受け入れるため、すべての置換を一度に実行できます。

$text = str_replace($oldValues, $newValues, $text);

ここで、$ oldValues = array('[[customername]]'、[[orderstatus]]、...)

および$newValues= array('John Smith'、'承認済み'、...)

于 2011-02-14T16:40:47.080 に答える
0

個人的には、次のような小さなテンプレートクラスを作成します。

class EmailTemplate
{
    private $_template = '';

    public function __construct($template)
    {
        $this->_template = $template;
    }

    public function __set($key,$value)
    {
        $this->_template = str_replace("[[" . $key . "]]",$value,$this->_template);
    }

    public function __toString()
    {
        return $this->_template;
    }
}

簡単な使用法は次のようになります。

$temp = file_get_contents("email/templates/invoice.template");

$Template = new EmailTemplate($temp);

$Template->customername = "John Doe";
$Template->orderstatus = "On Route";
$Template->orderid = 14875356;
$Template->dateordered = date();
$Template->paymentmethod = "VISA (DD)";
$Template->billingstatement = "blah";

echo $Template; // = Happy.
于 2011-02-14T16:47:08.777 に答える
0

あなたが言ったように、これには正しいことも悪いこともありません、私は通常物事に名前を付けます:

_customername_

特定の理由はありません:)

于 2011-02-14T16:37:21.733 に答える
0

str_replaceで配列を使用できます

于 2011-02-14T16:37:45.693 に答える
0

コードが適切にフォーマットされていれば、それが最速の方法であるため、問題ありません。

2つの文字列の代わりに2つの配列を使用して、str_replaceに渡すこともできますが、私の意見では、これは読みにくくなっています。

于 2011-02-14T16:37:53.777 に答える
0

字句解析器を使用して独自の拡張機能を作成できます。php拡張機能の作成に関するチュートリアルについては、たとえばhttp://devzone.zend.com/article/1021にアクセスしてください。

于 2011-02-14T16:43:43.490 に答える