WEB開発備忘録

同じSmartyのテンプレートを使ってループ処理する時の注意 / clearCache

こんなことをしようとしていました。

1.複数メールを送信したい
2.それぞれ中身は微妙に異なる
3.でも基本は一緒

つまりプログラム的に、ロジック的に解釈しなおすと

1.ループでメールを送る
2.基本は同じテンプレートで
3.異なる部分は値の書き換え

したがってPHP+smartyでこんなコードを書きました。

for (条件式){
  メールを作る処理
 $smarty->assign(変わる部分だけ値をassign);
  $body = $smarty->fetch(メールテンプレート); // 本文
  $smarty->clearAllAssign();
  // メール送信処理
}

でも、これだと二通目以降も全て一通目と同じ内容に、、、なぜだ?clearAllAssignしてるのに
※ clearAllAssignはそれまでsmartyに覚えこませていたassignでセットした値たちをクリアします。

原因はテンプレートのキャッシュをクリアしてないからでした。

for (条件式){
  メールを作る処理
 $smarty->assign(変わる部分だけ値をassign);
  $body = $smarty->fetch(メールテンプレート); // 本文
 <strong> $smarty->clearCache(メールテンプレート);  // メールテンプレートのキャッシュをクリアする</strong>
  $smarty->clearAllAssign();
  // メール送信処理
}

考えてみれば、テンプレートのキャッシュをクリアしないと再利用されてしまいますね。
smartyのループで処理をする時には

  1. cleaCache() でテンプレートのキャッシュを都度クリア
  2. cleaAllAssign()でセットした値を都度リセット

忘れずに!