爲 CodeIgniter 增加第三方類庫-smarty

 小試一段時間的CodeIgniter,發現同Zend Framework一樣,自帶的VIEW用起來很是不方便。於是突然想到,公司的Zend Framework的view都被換成smarty,再者,smarty也用習慣了。就試想CodeIgniter 能否也能加載第三方類庫呢。

google一下,有幾篇文章有介紹了。找到了官方站上的manual也有說明,按照manual的介紹。開工

 

首先,把smarty的目錄copy至 application/libraries目錄中,在libraries根目錄建立一個文件

文件名就是:MySmarty.php

爲遵循CodeIgniter的標準,類的命名格式同樣依照CodeIgniter給的標準命名

 

  1. require "Smarty/Smarty.class.php";
  2. class MySmarty {
  3.     public $s;
  4.     
  5.     public function __construct(){
  6.         self::smartyConfig();
  7.     }
  8.     
  9.     private function smartyConfig(){
  10.         //$basedir = dirname(__FILE__);
  11.         $basedir = $_SERVER["DOCUMENT_ROOT"]."/system/application";
  12.         
  13.         $this->s = new Smarty();
  14.         $this->s->template_dir = $basedir."/templates/";
  15.         $this->s->compile_dir  = $basedir."/templates_c/";
  16.         $this->s->config_dir   = $basedir."/configs/";
  17.         $this->s->cache_dir    = $basedir."/cache/";
  18.         $this->s->left_delimiter = "{*";
  19.         $this->s->right_delimiter = "*}";
  20.         
  21.         $this->s->debugging = false;
  22.         $this->s->cache_lifetime=30;
  23.     }
  24.     
  25.     public function getTempDir(){
  26.         return $this->s->template_dir;
  27.     }
  28.     
  29. }

google出來的幾篇文章用當前類MySmarty繼承的方式配置,而我稍改動了一下。在MySmarty中使用$s的屬性來引用smarty的對象。接下來就是smarty基本的配置了。配置完成後到appliaction文件夾中創建兩個目錄用於存放模板和模板緩存

 

第二步:

在application/controllers中創建一個控制器,文件名爲car.php

 

  1. class Car extends Controller {
  2.     
  3.     public function __construct(){
  4.         parent::Controller();
  5.         $this->load->library("mysmarty");
  6.     }
  7.     
  8.     public function index(){
  9.         $cc = new stdclass;
  10.         
  11.         $cc->dd[] = (object) array("c"=>"神經病");
  12.         $cc->dd[] = (object) array("c"=>"瘋子");
  13.         
  14.         //$this->load->view("mivec/car",$cc); //Codeigniter 自帶的view
  15.         echo $this->mysmarty->getTempDir();
  16.         $this->mysmarty->s->assign("mivec",$cc->dd);//第三方LIB smarty
  17.         $this->mysmarty->s->display("mivec/car.html");
  18.     }
  19. }

類:Car中的構造函數是覆蓋CodeIgniter中Controller的構造函數,以便於我們初始化一些東西;

  1. $this->load->library("mysmarty");

這段標識加載類:MySmarty。manual中說加載類的時候是部分大小寫的

  1. $this->mysmarty->s->assign("mivec",$cc->dd);
  2. $this->mysmarty->s->display("mivec/car.html");

已經加載了 mysmarty 類後就可以用mysmarty中的$s屬性指向smarty了。跟常規的用法是沒區別的

最後到templates中建立對應的模板文件。打開瀏覽器測試一下。通過了

參考資料:http://www.codeigniter.org.cn/user_guide/general/creating_libraries.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章