2007年9月7日金曜日

Smarty Plugin デリミタを途中で変えてみる

Smarty Plugin

こんなことがあったので、自分用にメモ。

別プロジェクトだけど
ヘッダファイルとかフッタファイルは共通で使いたい・・・
けど、Smartyのデリミタ(こんなの{$hoge})の設定が違くて
普通には使えない。

ソースをコピペで回避すると
ファイル数が増えた時に2間管理になって困るし・・・。

ということでSmartyのプラグインを作って回避した。
はじめて挑戦したけど、意外と簡単だった。


function smarty_function_delim_include($params, &$smarty)
{
 if (empty($params["file"])){
  $smarty->trigger_error("param:'file' is not defined");
  return;
 }

 if (!$smarty->template_exists($params["file"])){
  $smarty->trigger_error($params["file"] . " not found");
  return;
 }

 if(empty($params["ldelim"]) || empty($params["rdelim"])){
  $smarty->trigger_error("param:'ldelim or rdelim' is not defined");
  return;
 }

 // デリミタ保存
 $_buff_ldelim = $smarty->left_delimiter;
 $_buff_rdelim = $smarty->right_delimiter;

 // デリミタ変更
 $smarty->left_delimiter = $params["ldelim"];
 $smarty->right_delimiter = $params["rdelim"];

 $_params = array();
 $_params["smarty_include_tpl_file"] = "file:" . $params["file"];
 $_params["smarty_include_vars"] = array();
 $smarty->_smarty_include($_params);

 // デリミタ戻し
 $smarty->left_delimiter = $_buff_ldelim;
 $smarty->right_delimiter = $_buff_rdelim;

 return;
}
他にもっといい方法がありそうだけど、
今回はこんなもんで。


0 件のコメント: