CodeIgniterでSmartyを使う方法とポイント

概要

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 を導入してみてください。