PHPのテンプレートエンジンとして、
Smartyを使っている方は多数いるかと思います。
小規模なシステムであればシンプルで使いやすいのですが、
システムが大きくなるに従って、
header.tpl、footer.tpl、banner.tplなど
パーツ化され細分化していき、管理が煩雑になってきます。
サイトを修正するにあたっても、
あれ?ここどこのテンプレートファイルだったっけ?
となるようなこともよくあります・・・
というわけで、Smartyを拡張して
簡単にテンプレートファイルを見分けられるような
機能を作成してみました。
この機能を使うと、Smartyを使ったページを
下記のようにアウトライン化して表示できます。
めちゃくちゃ見やすいっ!! ![]()
(サンプルは ESET Smart Securityのサイト)

サイドバーもこの通り。
この機能の実装方法ですが、とてもシンプルです。
Smartyの代わりに、下記のクラスを使用してください。
-
class MySmarty extends Smarty {
-
var $outline_tpl = false; //trueにするとアウトライン表示]
-
-
function _smarty_include($params){
-
if ($this->outline_tpl){
-
echo $this->getOutlineBegin($params['smarty_include_tpl_file']);
-
}
-
parent::_smarty_include($params);
-
if ($this->outline_tpl){
-
echo $this->getOutlineEnd();
-
}
-
}
-
-
function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false){
-
if ($this->outline_tpl){
-
if ($display){
-
echo $this->getOutlineBegin($resource_name);
-
parent::fetch($resource_name, $cache_id, $compile_id, $display);
-
echo $this->getOutlineEnd();
-
}else{
-
return $this->getOutlineBegin($resource_name).parent::fetch($resource_name, $cache_id, $compile_id, $display).$this->getOutlineEnd();
-
}
-
}else{
-
return parent::fetch($resource_name, $cache_id, $compile_id, $display);
-
}
-
}
-
-
function getOutlineBegin($resource_name){
-
return '<fieldset style="border:1px solid #ff9966;padding:3px;margin:3px;"><legend style="font-size:12px;color:#333333"">'.$resource_name.'</legend>';
-
}
-
-
function getOutlineEnd(){
-
return '</fieldset>';
-
}
-
}
(08/07/25 少しソースを修正しました)
これだけです。(「テキスト表示」タブをクリックするとコピーに便利です)
※すでにSmartyを継承したクラスを使っている方は、
プロパティとメソッドをコピーしてください。
アウトライン表示したい場合は、
-
$smarty = new MySmarty();
-
$smarty->outline_tpl = true;
と、outline_tpl に true をセットすればokです。
仕組みとしては、Smartyの{include}構文の実体である
_smarty_includeメソッドと、fetchメソッドを
オーバーライドし、実行時の前後に
fieldset+legendタグを入れているだけです。
表示のさせ方が気に入らない方は自由に
スタイルやタグを修正してくださいね
ぜひお試しを!
関連した記事:
■ 「日本でいちばん社員満足度が高い会社の非常識な働き方」
この記事へのコメント (0)
コメントはまだありません。



















ページの先頭に戻る
コメントを投稿