サイトで、ヘッダ部分やフッタ部分やサイドメニューなど、
サイト全体で共通の表示をおこないたい時に、
昔からよく使うのがSSIの

<!--#include virtual="ドキュメントルートからのパス"-->

 

  

<!--#include file="同ディレクトリ内のファイル、または、下位ディレクトリのファイルのパス"-->

 
でインクルードする方法。
 
 
古い方法ですが、非常に有用。
 
でー。Smartyで同じような機能を実現するのが、{include file=’xxx.html’}の記述。
こちらも有用。
 
SmartyのテンプレートをDremweaverで編集するとき、
やはりインクルードの状態をプレビューしたくて、
編集のときは、SSIの表記を埋め込んで編集。
アップするときは、{include}に置き換え。
というまぁ、とてつもなくめんどくさいことをずっとやってました。
 
よく考えたら、
SSIの記述をSmartyの{include}に置き換える処理を、
Smartyのプリフィルターとして用意しておけばいいじゃん!
ってことに気づきました。
 
ってわけで作成。

function smarty_prefilter_ssi2include($source, &$smarty){
//<!--#include virtual="ドキュメントルートからのパス">
$source = preg_replace(
'/\<\!\-\-\#include virtual\=\"\/([0-9a-zA-Z\.\/\_\-]*)\"\-\-\>/i',
$smarty->left_delimiter . 'include file=\'' . $_SERVER['DOCUMENT_ROOT'] . '/' . "$1" . '\'' . $smarty->right_delimiter,
$source
);

//<!--#include file="相対パス" -->
$source = preg_replace(
'/\<\!\-\-\#include file\=\"([0-9a-zA-Z\.\/\_\-]*)\"\-\-\>/i',
$smarty->left_delimiter . 'include file=\'' . "$1" . '\'' . $smarty->right_delimiter,
$source
);
return $source;
}

 
これを「prefilter.ssi2include.php」の名前でプラグインフォルダに保存し(PHPタグを忘れずに)
smartyのインスタンス作成時に読み込むプリフィルターとして「ssi2include」を指定してやれば、OKです。
 
 
なお、インクルードするファイルのパスには半角英数「-」「_」「.」「/」が利用されることを想定しています。
それ以外の文字が入る場合は修正して利用してください。
 
あと、正規表現は実に適当です(^-^;