EC studio EC studio 技術ブログ

PHPのテンプレートエンジンとして、
Smartyを使っている方は多数いるかと思います。

小規模なシステムであればシンプルで使いやすいのですが、
システムが大きくなるに従って、
header.tpl、footer.tpl、banner.tplなど
パーツ化され細分化していき、管理が煩雑になってきます。

サイトを修正するにあたっても、
あれ?ここどこのテンプレートファイルだったっけ?
となるようなこともよくあります・・・

というわけで、Smartyを拡張して
簡単にテンプレートファイルを見分けられるような
機能を作成してみました。

この機能を使うと、Smartyを使ったページを
下記のようにアウトライン化して表示できます。

めちゃくちゃ見やすいっ!! :)
(サンプルは ESET Smart Securityのサイト)

サイドバーもこの通り。

この機能の実装方法ですが、とてもシンプルです。
Smartyの代わりに、下記のクラスを使用してください。

  1. class MySmarty extends Smarty {
  2.     var $outline_tpl = false; //trueにするとアウトライン表示]
  3.    
  4.     function _smarty_include($params){
  5.         if ($this->outline_tpl){
  6.             echo $this->getOutlineBegin($params['smarty_include_tpl_file']);
  7.         }
  8.         parent::_smarty_include($params);
  9.         if ($this->outline_tpl){
  10.             echo $this->getOutlineEnd();
  11.         }
  12.     }
  13.    
  14.     function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false){
  15.         if ($this->outline_tpl){
  16.             if ($display){
  17.                 echo $this->getOutlineBegin($resource_name);
  18.                 parent::fetch($resource_name, $cache_id, $compile_id, $display);
  19.                 echo $this->getOutlineEnd();
  20.             }else{
  21.                 return $this->getOutlineBegin($resource_name).parent::fetch($resource_name, $cache_id, $compile_id, $display).$this->getOutlineEnd();
  22.             }
  23.         }else{
  24.             return parent::fetch($resource_name, $cache_id, $compile_id, $display);
  25.         }
  26.     }
  27.    
  28.     function getOutlineBegin($resource_name){
  29.         return '<fieldset style="border:1px solid #ff9966;padding:3px;margin:3px;"><legend style="font-size:12px;color:#333333"">'.$resource_name.'</legend>';
  30.     }
  31.    
  32.     function getOutlineEnd(){
  33.         return '</fieldset>';
  34.     }
  35. }

(08/07/25 少しソースを修正しました)

これだけです。(「テキスト表示」タブをクリックするとコピーに便利です)

※すでにSmartyを継承したクラスを使っている方は、
プロパティとメソッドをコピーしてください。

アウトライン表示したい場合は、

  1. $smarty = new MySmarty();
  2. $smarty->outline_tpl = true;

と、outline_tpltrue をセットすればokです。

仕組みとしては、Smartyの{include}構文の実体である
_smarty_includeメソッドと、fetchメソッドを
オーバーライドし、実行時の前後に
fieldset+legendタグを入れているだけです。

表示のさせ方が気に入らない方は自由に
スタイルやタグを修正してくださいね ;)

ぜひお試しを!


関連した記事:
投稿者
人気のエントリー
カテゴリー
最近のエントリー
アーカイブ
Copyright© ChatWork, All Rights Reserved. secured by ESET.