Blog

It's a Wonderful Life

如何在CI框架中集成Smarty模板引擎

2016-11-22 18:21 Posted in Learn with PHP , CI , Smarty

框架对于提升一个项目的开发速度的帮助还是很大的,CI也就是CodeIgniter,是一个轻量级,语法简单,但功能却十分强大的框架,而且CI的中文社区有十分完善的Documentation,比较适合E文苦手的小伙伴上手。

同样的,模板引擎也能够大大减低html文件中的重复代码量,提升代码可读性和开发效率。如果能把两者结合就更好了,基于这样的目的,本文介绍如何在CI框架中集成Smarty模板。

  1. 下载最新版本的Smarty文件(我用的版本是3.1.10),并Copy到CI应用目录下的libraries文件夹中。
  2. libraries文件夹中新建文件Cismarty.php

     <?php
     require_once(APPPATH . 'libraries/Smarty-3.1.30/Smarty.class.php');
     class Cismarty extends Smarty {
         public function __construct()
         {
             parent::__construct();
    		
             $this->setTemplateDir(APPPATH . 'views');
             $this->setCompileDir(APPPATH . 'templates_c');
             $this->setCacheDir(APPPATH . 'cache');
             $this->setConfigDir(APPPATH . 'configs');
    		
             $this->caching = Smarty::CACHING_LIFETIME_CURRENT;
         }
     }
    
  3. 在你的APPPATH同级目录中新建template_c, configs文件夹,并确认Smarty有读写权限。
    (cacheviews文件夹是CI自带的,所以可以不用创建,当然如果你喜欢的话也能自定义其他的目录供Smarty使用)

  4. 在项目的config文件夹中找到autoload.php并修改以下行。

     $autoload['libraries'] = array('Cismarty');
    
  5. 在项目的core目录新建文件MY_Controller.php

     <?php
     class MY_Controller extends CI_Controller {
         public function __construct()
         {
             parent::__construct();
         }
    	
         public function assign($key, $val)
         {
             $this->cismarty->assign($key, $val);
         }
    	
         public function display($template)
         {
             $this->cismarty->display($template);
         }
     }
    

    这一步是可选的,目的是让你在开发中可以直接使用类似$this->display(#), $this->assign(#)的代码。

完成啦!接下来可以做一些测试,像这样。

<?php
class Test extends MY_Controller {
//Pay attention to here extends MY_Controller, not CI_Controller
	public function __construct()
	{
		parent::__construct();
	}
	
	public function index()
	{
		$header = $this->cismarty->createTemplate('header.tpl');
		$header->assign('title', 'test smarty');
		$header->display();
		
		$content = $this->cismarty->createTemplate('smarty.tpl');
		$content->assign('test', 'I am using Smarty with CI!');
		$content->display();
		
		$this->display('footer.tpl');
	}
}

如果一切顺利,你就能看到 I am using Smarty with CI! 的字样啦!