Help us understand the problem. What is going on with this article?

CodeIgniter 3 とSmarty連携させる

More than 3 years have passed since last update.

新人研修で、新人にはSmarty教えるとの事だったので勤務先で採用してるCodeIgniter 3とsmarty連携まとめておきます。
本当はTwig使いたいところだけどね。

※注意点としてはCodeIgniter2とは連携方法が変わっております。

動作確認環境

  • Vagrant+Virtualbox+CentOS6のPHP5.6
  • CodeIgniter3.0.4
  • Smarty3.1.20

作業手順

  • 最新版Smartyを以下からダウンロードしてきます。

http://www.smarty.net/download
※直接ダウンロードする場合こちら
https://github.com/smarty-php/smarty/archive/master.zip

  • ダウンロードしたsmartyを解凍してディレクトリ名をSmartyにしておきます。
unzip smarty-master.zip
mv smarty-master Smarty
  • Smartyディレクトリをsystem/librariesに入れます。
cp -R Smarty system/libraries
  • system/librariesにSmarty.phpを作成し、以下の内容にします。
cd system/libraries
vi Smarty.php

で、

Smarty.php
<?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);
        }
    }
}
  • application/views/に移動してSmarty用の 'templates'とtemplates_cを作成
cd ../application/views
mkdir templates
mkdir templates_c
  • 最後にapplication/config/autoload.phpを編集

$autoload['libraries'] =にsmarty追加

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

これで設定完了です。次はテンプレートに出力してみましょう。

コントローラからビューのテンプレートに出力

Controllerに適当なやつ作って、

public function index()
    {
        $data['title'] = 'hello world';
        $this->smarty->view('example.tpl',$data);
    }

viewにtpl作って

{$title}

これで出力出来たはずです。

参考

Codeigniter 3.x + Smarty - CodeIgniter Forums

fgnhssb
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away