FuelPHP標準のViewクラスを利用する際、テンプレートの拡張子が「php」になっているんだけど、
これを別の拡張子に変えたかったので調べてみた。
一応viewクラスは直接触らずに(coreファイルは弄りたくない)対応する事を前提にしています。
1. 既存のViewクラスをapp/vendor内に作成したviewディレクトリ配下にコピーする
拡張子を変える以外は既存のViewクラスの機能をそのまま利用したかったので、とりあえずまるっとvendorにコピー
core/classes/view.phpをapp/vendor/view/view.phpへ
2. app/config/config.phpに変更したいテンプレート拡張子を追加し、parserパッケージをオートロードするようにする
view周りのことはparserパッケージを使えばできるよって諸処で記載されていたので、今回はこれを利用してみる。
always_loadで対象のパッケージを入れて、それと一緒に変更したい拡張子(今回は「.tpl.html」とする)も合わせて記述。
実際の記述はこんな感じ
// app/config/config.php return array ( /** * テンプレート拡張子 */ 'template_extension' => 'tpl.html' , /** * 自動ロードライブラリ */ 'always_load' => array ( 'packages' => array ( 'parser', ) ) );
3. app/config/parser.phpを作成し、拡張子とViewを関連付ける
packages/parser/config/parasr.phpを参考に、同じファイルをapp/config以下に設置し2.で設定したtemplate_extensionの値を設定
// app/config/parser.php return array( 'extensions' => array ( Config:: get('template_extension') => 'View', ), );
4. app/vendor/view/view.phpをちょっと弄る
1.でコピーしたviewクラスのコンストラクタに、テンプレート拡張子の設定を反映する記述を追加
// app/vendor/view/view.php public function __construct($file = null, $data = null, $filter = null) { if (Config::get( 'template_extension')) { $this-> extension = Config:: get('template_extension'); } . . .
5. 独自のViewをapp/bootstrap.php内で宣言
// app/bootstrap.php Autoloader::add_classes (array ( 'View' => APPPATH. 'vendor/view/view.php', ));
6. 通常通りにviewを使う
\View::forge('index');
この時のviewテンプレートの拡張子は、template_extensionで設定したもの