CodeIgniterでPHPTALテンプレートを使う
CodeIgniter用のPHPTALテンプレートパーサークラスをつくってみました。
CodeIgniterでPHPTALをテンプレートとして使えるようになります。
※PHPTALのライブラリをapplication/library/phptal
ディレクトリに保存して、パスが通るようにしなければなりません。
その他、PHPTAL_PHP_CODE_DESTINATION定数にPHPTALのコンパイルされたファイルを保存する場所を設定しておく必要があります。
無い場合はデフォルトの設定が使われます。
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * * @category * @package Phptal Parser Class * @author KUNIHARU Tsujioka <kunitsuji@gmail.com> * @copyright Copyright (c) 2008 KUNIHARU Tsujioka <kunitsuji@gmail.com> * @copyright Copyright (c) 2006-2008 Usagi Project (URL:http://usagi.mynets.jp) * @license New BSD License * @version 2008-04-23 Ver 0.1.0 */ require_once "PHPTAL.php"; //require_once "myPostFilter.php"; class Phptal_parser { private $_PHPTAL = NULL; private $_CI = NULL; public function __construct($config = array()) { //parent::__construct(); $this->_PHPTAL = new PHPTAL(); $this->_CI =& get_instance(); if (count($config) > 0) { $this->initialize($config); } log_message('debug', "Phptal_parser Class Initialized"); } /* * Method: fetch * * @param str tmplatename * @param arr data * @param arr options meta-http, meta-name, js, css,etc * */ public function fetch($tmpl, $data, $options = array()) { $this->_CI->load->config('phptal_parser'); $config = $this->_CI->config->config; $dir = $config['dir']; $suffix = $config['suffix']; $tmplPath = sprintf('%s%s%s', $dir, $tmpl, $suffix); //$this->_CI->benchmark->mark('phptal_parse_start'); // title if (isset($data['title'])) { $data['title'] = $data['title']; } else { $data['title'] = 'no-title'; } // instance $phptal = $this->_PHPTAL; $phptal->setTemplate($tmplPath); foreach($data as $p => $value) { $phptal->$p = $value; } //フィルター実行 /* $filter = array(); $phptal->setPostFilter(new FilterChain()); */ // execute the template try { $result = $phptal->execute(); } catch (Exception $e){ echo $e; exit; } //$this->_CI->benchmark->mark('phptal_parse_end'); return $result; } /* * Method: view * * @param str tmplatename * @param arr data * @param arr options meta-http, meta-name, js, css,etc * */ public function view($tmpl, $data, $options = array()) { echo $this->fetch($tmpl, $data, $options); } } ?>