小試一段時間的CodeIgniter,發現同Zend Framework一樣,自帶的VIEW用起來很是不方便。於是突然想到,公司的Zend Framework的view都被換成smarty,再者,smarty也用習慣了。就試想CodeIgniter 能否也能加載第三方類庫呢。
google一下,有幾篇文章有介紹了。找到了官方站上的manual也有說明,按照manual的介紹。開工
首先,把smarty的目錄copy至 application/libraries目錄中,在libraries根目錄建立一個文件
文件名就是:MySmarty.php
爲遵循CodeIgniter的標準,類的命名格式同樣依照CodeIgniter給的標準命名
- require "Smarty/Smarty.class.php";
- class MySmarty {
- public $s;
- public function __construct(){
- self::smartyConfig();
- }
- private function smartyConfig(){
- //$basedir = dirname(__FILE__);
- $basedir = $_SERVER["DOCUMENT_ROOT"]."/system/application";
- $this->s = new Smarty();
- $this->s->template_dir = $basedir."/templates/";
- $this->s->compile_dir = $basedir."/templates_c/";
- $this->s->config_dir = $basedir."/configs/";
- $this->s->cache_dir = $basedir."/cache/";
- $this->s->left_delimiter = "{*";
- $this->s->right_delimiter = "*}";
- $this->s->debugging = false;
- $this->s->cache_lifetime=30;
- }
- public function getTempDir(){
- return $this->s->template_dir;
- }
- }
google出來的幾篇文章用當前類MySmarty繼承的方式配置,而我稍改動了一下。在MySmarty中使用$s的屬性來引用smarty的對象。接下來就是smarty基本的配置了。配置完成後到appliaction文件夾中創建兩個目錄用於存放模板和模板緩存
第二步:
在application/controllers中創建一個控制器,文件名爲car.php
- class Car extends Controller {
- public function __construct(){
- parent::Controller();
- $this->load->library("mysmarty");
- }
- public function index(){
- $cc = new stdclass;
- $cc->dd[] = (object) array("c"=>"神經病");
- $cc->dd[] = (object) array("c"=>"瘋子");
- //$this->load->view("mivec/car",$cc); //Codeigniter 自帶的view
- echo $this->mysmarty->getTempDir();
- $this->mysmarty->s->assign("mivec",$cc->dd);//第三方LIB smarty
- $this->mysmarty->s->display("mivec/car.html");
- }
- }
類:Car中的構造函數是覆蓋CodeIgniter中Controller的構造函數,以便於我們初始化一些東西;
- $this->load->library("mysmarty");
這段標識加載類:MySmarty。manual中說加載類的時候是部分大小寫的
- $this->mysmarty->s->assign("mivec",$cc->dd);
- $this->mysmarty->s->display("mivec/car.html");
已經加載了 mysmarty 類後就可以用mysmarty中的$s屬性指向smarty了。跟常規的用法是沒區別的
最後到templates中建立對應的模板文件。打開瀏覽器測試一下。通過了
參考資料:http://www.codeigniter.org.cn/user_guide/general/creating_libraries.html