【CodeIgniter】CodeIgniterとSmartyの連携

codeigniter WEB

会社で使用しているテンプレートエンジンがSmartyですので、CodeIgniterとSmartyの連携方法をまとめておきます。

今回の使用バージョン

Smarty 3.1.34
CodeIgniter 3.1.11

ダウンロード

Smartyのダウンロードは下記から。
https://www.smarty.net/download
(最新バージョンでいいと思います)

CodeIgniterはこちらの記事からどうぞ

インストールと設定

ダウンロードして解凍したsmartyのディレクトリ名を「Smarty」にリネームします。
頭文字を大文字にすることを忘れずに。

smarty-3.1.34 → Smarty

リネームしたSmartyフォルダ(ディレクトリ)をCodeIgniterの「system/libraries」に入れます。

system/libraries/Smarty

system/libraries/に「Smarty.php」を新規作成して、下記の内容を保存してください。

if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once(BASEPATH . 'libraries/Smarty/libs/Smarty.class.php');

class CI_Smarty extends Smarty {

    public function __construct() {

        parent::__construct();

        $this->compile_dir = APPPATH . "views/templates_c";
        $this->template_dir = APPPATH . "views/templates";
        $this->assign( 'APPPATH', APPPATH );
        $this->assign( 'BASEPATH', BASEPATH );

        // Assign CodeIgniter object by reference to CI
        if ( method_exists( $this, 'assignByRef') ) {

          $ci =& get_instance();
          $this->assignByRef("ci", $ci);
        }

        log_message('debug', "Smarty Class Initialized");
    }

    function view($template, $data = array(), $return = FALSE) {

        foreach ($data as $key => $val) {

            $this->assign($key, $val);
        }

        if ($return == FALSE) {

            $CI =& get_instance();

            if (method_exists( $CI->output, 'set_output' )) {

                $CI->output->set_output( $this->fetch($template) );

            } else {

                $CI->output->final_output = $this->fetch($template);
            }

            return;

        } else {

            return $this->fetch($template);
        }
    }
}

次に、実際にSmartyを置く場所を作成します。
application/viewsに「templates」と「templates_c」2つのフォルダ(ディレクトリ)を作成します。
この時、ディレクトリに書き込み権限を与えないとキャッシュが作成出来ませんので注意。

/* 書き込み権限を与えることを忘れずに */
application/views/templates
applocation/views/templates_c

application/config/autoload.phpにの「libraries」にsmartyを追加します。

$autoload['libraries'] = array('smarty');

以上で設定は終わりです。

出力確認

CodeIgniterでデフォルトに入っているWelcome.phpを利用して確認します。
(もちろん、これは自作ControllerでもOK)

defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

    public function index() {

        $this->smarty->assign("test", 'Hello World');
        $this->smarty->view('test.tpl');
    }
}

views/templatesにtest.tplを作成します。

{$test}

ブラウザで確認して「Hello World」が出力されていたら成功です。

参考にさせていただきました
404 Not Found - Qiita - Qiita
タイトルとURLをコピーしました