PHP
CodeIgniter
Smarty
CodeIgniter3

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