
概要
CodeIgniterは軽量かつ高速なPHPフレームワークです。デフォルトのビューはPHPで記述しますが、Smartyというテンプレートエンジンを組み合わせることで、HTMLとロジックをより明確に分離できます。本記事では、CodeIgniterにSmartyを導入する手順と、実践的な使い方を解説します。
導入手順
1. Smarty本体のインストール
Composer が利用できる環境であれば、以下のコマンドで Smarty をインストールします。
composer require smarty/smarty
Composer を使わない場合は、公式サイトから zip ファイルをダウンロードし、application/third_party/Smarty ディレクトリに展開してください。
2. CodeIgniter に Smarty ライブラリを作成
application/libraries/Smartyci.php に以下のクラスを作成します。
<?php
class Smartyci {
public $smarty;
public function __construct(){
// Composer でインストールした場合は autoload を利用
if (file_exists(APPPATH.'../vendor/autoload.php')){
require_once(APPPATH.'../vendor/autoload.php');
} else {
require_once(APPPATH.'third_party/Smarty/Smarty.class.php');
}
$this->smarty = new Smarty();
// テンプレートディレクトリの設定
$this->smarty->setTemplateDir(APPPATH.'views/smarty/');
// コンパイルディレクトリの設定(Write 権限が必要)
$this->smarty->setCompileDir(APPPATH.'../storage/smarty/compile/');
// キャッシュディレクトリ(使用しない場合は無効化)
$this->smarty->setCacheDir(APPPATH.'../storage/smarty/cache/');
$this->smarty->caching = Smarty::CACHING_OFF;
}
// テンプレートへデータを割り当て
public function assign($tpl_var, $value = null){
$this->smarty->assign($tpl_var, $value);
}
// テンプレートを表示
public function display($template){
$this->smarty->display($template);
}
}
?>
3. コントローラで Smarty を呼び出す
例として application/controllers/Welcome.php に Smarty を利用したアクションを追加します。
<?php
class Welcome extends CI_Controller {
public function index(){
// ライブラリのロード
$this->load->library('smartyci');
// データの割り当て
$data = [
'title' => 'CodeIgniter + Smarty デモ',
'message' => 'Smarty を使ったテンプレートです。'
];
foreach($data as $key => $value){
$this->smartyci->assign($key, $value);
}
// テンプレート表示 (拡張子は .tpl)
$this->smartyci->display('welcome.tpl');
}
}
?>
4. Smarty 用テンプレート作成
テンプレートは application/views/smarty/ 配下に配置します。拡張子は慣例的に .tpl を使用します。
<!-- application/views/smarty/welcome.tpl -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>{$title|escape}</title>
</head>
<body>
<h1>{$title|escape}</h1>
<p>{$message|escape}</p>
<ul>
{foreach from=$items item=item}
<li>{$item|escape}</li>
{/foreach}
</ul>
</body>
</html>
実践的なポイント
- テンプレートディレクトリは CodeIgniter のビューとは別に管理することで、従来の PHP ビューと混在させずに保守性が向上します。
- キャッシュ機能は必要に応じて有効化します。開発中は
caching = Smarty::CACHING_OFFが便利です。 - デバッグコンソールは
$this->smarty->debugging = true;と設定すれば、テンプレート変数の内容をブラウザ上で確認できます。 - プラグインやカスタム関数は
plugins/ディレクトリに配置し、setPluginsDir()でパスを追加すると拡張しやすくなります。
まとめ
CodeIgniter に Smarty を組み込むことで、ビュー層のロジックをテンプレート言語に委譲し、HTML と PHP のコードをきれいに分離できます。導入手順は数ステップで完了し、assign / display のインタフェースだけ覚えておけば、既存のコントローラに容易に組み込めます。ぜひ本稿の手順を参考に、プロジェクトに Smarty を導入してみてください。