程序员人生 网站导航

为 CodeIgniter 增加第三方类库-smarty

栏目:codeigniter时间:2014-09-19 16:38:45

 小试一段时间的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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐