Smarty連携
CodeIgniterとSmartyを連携する方法はそれほど難しくはありません。
大まかなインストールの流れは以下のようになります。
- Smartyのダウンロード
- application/third_paty/ ディレクトリに設置
- ディレクトリ名、ファイル名の変更
- テンプレートファイルを設置するディレクトリの作成
- autoload.php の設定 (必要があれば)
インストールしたSmartyの利用方法には2通りあります。
- CI_Controllerを拡張(オーバーライド)して利用する方法
- コントローラ毎に利用する方法
(2.)の方法は、一部のコントローラのみでSmartyを利用する場合に選択することになると思います。
Smartyのインストール
まず、PHPのバージョンを確認しましょう。PHPのバージョンが「5.2」以上であれば「Smarty 3.x」系が利用できます。 PHPのバージョンが「5.1」以下の場合は、「Smarty 2.x」系をダウンロードしてください。
- Smartyダウンロード
- Smarty解凍・展開
- ディレクトリ名・ファイル名の変更
- テンプレートディレクトリ作成
- autoload.phpの設定
wget http://www.smarty.net/files/Smarty-3.1.8.tar.gz
「application/third_paty/」ディレクトリに展開します。
mv Smarty-3.1.8 smarty
mv smarty/libs smarty/libraries
mv smarty/libraries/Smarty.class.php smarty/libraries/Smarty.php
「Smarty-3.1.8」ディレクトリ名を「smarty」に変更します。
「libs」ディレクトリ名を「libraries」に変更します。
「Smarty.class.php」ファイル名を「Smarty.php」に変更します。
mkdir application/views/templates_c
「templates_c」ディレクトリのパーミッションを適宜変更してください。
$autoload['libraries'] = array('smarty');
一部のコントローラでのみSmartyを利用する場合は、 「autoload.php」での自動読込設定は必要ないかもしれません。適宜、設定してください。
Smartyの利用
Smartyを利用するには、 CI_ControllerクラスをオーバーライドしてSmartyを利用する方法、 コントローラ毎に必要に応じてSmartyを利用する方法があります。
CI_Controllerクラスの拡張
- MY_Controller.php
- サンプルコントローラ(application/controllers/sapmle.php)
autoload.phpで自動読込の設定がされていることを前提に説明していきます。
<?php class My_Controller extends CI_Controller { protected $template; public function __construct() { parent::__construct(); $this->smarty->template_dir = APPPATH . 'views/templates'; $this->smarty->compile_dir = APPPATH . 'views/templates_c'; $this->template = 'layout.tpl'; } public function view($template) { $this->template = $template; } public function _output($output) { if (strlen($output) > 0) { echo $output; } else { $this->smarty->display($this->template); } } }
「application/core/」ディレクトリにCI_Controllerの拡張ファイルを作成します。
<?php class Sample extends MY_Controller { public function __construct() { parent::__construct(); } public function my_action() { $this->view('my_action.tpl'); } }
拡張したコントローラを更にオーバーライドしてコントローラクラスを作成しています。
コントローラ毎で利用
- サンプルコントローラ(application/controllers/sample.php)
一部のコントローラでのみSmartyを利用する場合などは、 自動ロード設定はせずに各コントローラで初期化した方が Webアプリケーション全体のパフォーマンスが良くなります。
<?php class Sample extends MY_Controller { public function __construct() { parent::__construct(); $this->load->library('smarty'); $this->smarty->template_dir = APPPATH . 'views/templates'; $this->smarty->compile_dir = APPPATH . 'views/templates_c'; } public function my_action() { $this->smarty->assign('data', 'any data'); $this->smarty->display('my_action.tpl'); } }