| 제목 | smarty 이용하기. | ||
|---|---|---|---|
| 글쓴이 | emc | 작성시각 | 2009/08/08 07:47:59 |
|
|
|||
|
템플릿 으로 유명한 스마티를 이용해서 view를 컨트롤 하는 방법입니다. 원문은 ci 일본유저 사이트에 있습니다. http://codeigniter.jp/wiki/index.php/Smarty%E3%81%A8%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B%EF%BC%88UTF-8%E7%B7%A8%EF%BC%89 1. 스마티를 다운받아서 아래 경로에 압축풀기. CodeIgniter/system/libraries/ 2. 스마티의 초기폴더명을「libs」->「smarty」변경. CodeIgniter/system/libraries/smarty 3. smarty_parser.php 파일 생성 CodeIgniter/system/application/config/smarty_parser.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
// Please see Smarty user guide for more info:
// http://smarty.php.net/manual/en/api.variables.php
// The name of the directory where templates are located.
$config['template_dir'] = dirname(FCPATH);
// The directory where compiled templates are located
$config['compile_dir'] = BASEPATH.'cache/';
//This tells Smarty whether or not to cache the output of the templates to the $cache_dir.
$config['caching'] = 0;
// This forces Smarty to (re)compile templates on every invocation.
// When deploying, change this value to 0
$config['force_compile'] = 1;
$config['compile_check'] = TRUE;
?>
※ 캐쉬 파일은 CodeIgniter/system/cache/ 에 저장되고, 템플릿 파일은 /system/application/views/에 저장하면 되도록 셋팅하는 것. 4. Smarty_parser.php 파일 생성 CodeIgniter/system/libraries/Smarty_parser.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
require "smarty/Smarty.class.php";
class Smarty_parser extends Smarty {
function Smarty_parser($config = array())
{
parent::Smarty();
if (count($config) > 0)
{
$this->initialize($config);
}
// register Smarty resource named "ci"
$this->register_resource("ci", array($this,
"ci_get_template", "ci_get_timestamp", "ci_get_secure", "ci_get_trusted")
);
log_message('debug', "Smarty_parser Class Initialized");
}
/**
* Initialize preferences
*/
function initialize($config = array())
{
foreach ($config as $key => $val)
{
if (isset($this->$key))
{
$method = 'set_'.$key;
if (method_exists($this, $method))
{
$this->$method($val);
} else {
$this->$key = $val;
}
}
}
}
/**
* Set the left/right variable delimiters
*/
function set_delimiters($l = '{', $r = '}')
{
$this->left_delimiter = $l;
$this->right_delimiter = $r;
}
/**
* Parse a template using Smarty engine
*
* Parses pseudo-variables contained in the specified template,
* replacing them with the data in the second param.
* Allows CI and Smarty code to be combined in the same template
* by prefixing template name with "ci:".
*/
function parse($template, $data, $return = FALSE)
{
if ($template == '')
{
return FALSE;
}
$CI =& get_instance();
$CI->benchmark->mark('smarty_parse_start');
if (is_array($data))
{
$this->assign(&$data);
}
// make CI object directly accessible from a template (optional)
$this->assign_by_ref('CI', $CI);
$template = $this->fetch($template);
if ($return == FALSE)
{
$CI->output->final_output = $template;
}
$CI->benchmark->mark('smarty_parse_end');
return $template;
}
/**
* Smarty resource accessor functions
*/
function ci_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
$CI =& get_instance();
// ask CI to fetch our template
$tpl_source = $CI->load->view($tpl_name, $smarty_obj->get_template_vars(), true);
return true;
}
function ci_get_timestamp($view, &$timestamp, &$smarty_obj)
{
$CI =& get_instance();
// Taken verbatim from _ci_load (Loader.php, 580):
$ext = pathinfo($view, PATHINFO_EXTENSION);
$file = ($ext == '') ? $view.EXT : $view;
$path = $CI->load->_ci_view_path.$file;
// get file modification date
$timestamp = filectime($path);
return ($timestamp !== FALSE);
}
function ci_get_secure($tpl_name, &$smarty_obj)
{
// assume all templates are secure
return true;
}
function ci_get_trusted($tpl_name, &$smarty_obj)
{
// not used for templates
}
}
?>
준비완료.5. 스마티이용해보기. 5-1. CodeIgniter/system/application/controllers/smarty_test.php 파일 추가
<?php
class Smarty_test extends Controller {
function Smarty_test() {
parent::Controller();
}
function index(){
//라이브러리 호출
//config/autoload.php에 설정하면 편리.
$this->load->library('smarty_parser');
$data['title'] = "템플릿 파일 테스트";
$data['body'] = "스마티 템플릿으로 테스트 합니다.";
$this->smarty_parser->parse("ci:template_test.tpl", $data);
}
}
?>
5-2. view 파일(템플릿) : template_test.tpl 의 생성. CodeIgniter/system/application/views/template_test.tpl
<h3>{$title}</h3>
<h1>{$body}</h1>
5-3. 실행. http://root/ci/smarty_test/ 이상입니다. 개인적으로는 view에 불필요한 php 코드들이 표시되는것을 안좋아 하는 편입니다. 디자이너와 작업하는 일은 없지만, 뷰는 디자이너도 이해할수 있도록 php 코드가 안나오면 더 좋다고 생각합니다.... ;;; |
|||
| 다음글 | .htaccess Editor (2) | ||
| 이전글 | 코딩을 도와주는 폰트 추가요~~~ (8) | ||
|
변종원(웅파)
/
2009/08/08 08:44:13 /
추천
0
|
|
ci세상
/
2009/08/08 10:24:26 /
추천
0
좋은 자료입니다. ^^
CI 템플릿 파서 부분도 왠지 괜찮다는 생각이 드네요 http://codeigniter-kr.org/user_guide/libraries/parser.html 근데 템플릿 파서보다 php직접 코딩이 좀더 빠르다는 내용도 있어서 전 템플릿은 패스했습니다.^^ |
|
마냐
/
2009/08/08 13:17:27 /
추천
0
저도 CI세상님과 같은 이유로 패스. |
|
emc
/
2009/08/11 10:24:44 /
추천
0
ci 파서도 좋을것 같군요.
스마티에 익숙한 분은 스마티로 이용하세요. 저도 ci로 이용해봐야 겟습니다. |
|
터프키드
/
2009/08/26 10:19:28 /
추천
0
Template_ 사용방법도 알려주시면 안될까요?ㅜㅠ
아직도 연동 못하고 있는 1人 ㅠㅠ |
컨트롤러에서 완벽하게(?) 데이터 처리만 하신다면 ci의 템플릿도 쓸만합니다. ^^