小试一段时间的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 = $_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"=>"疯子");
-
-
- echo $this->mysmarty->getTempDir();
- $this->mysmarty->s->assign("mivec",$cc->dd);
- $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