Blog
It's a Wonderful Life
如何在CI框架中集成Smarty模板引擎
框架对于提升一个项目的开发速度的帮助还是很大的,CI也就是CodeIgniter,是一个轻量级,语法简单,但功能却十分强大的框架,而且CI的中文社区有十分完善的Documentation,比较适合E文苦手的小伙伴上手。
同样的,模板引擎也能够大大减低html文件中的重复代码量,提升代码可读性和开发效率。如果能把两者结合就更好了,基于这样的目的,本文介绍如何在CI框架中集成Smarty模板。
- 下载最新版本的Smarty文件(我用的版本是3.1.10),并Copy到CI应用目录下的
libraries
文件夹中。 -
在
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; } }
-
在你的
APPPATH
同级目录中新建template_c
,configs
文件夹,并确认Smarty有读写权限。
(cache
和views
文件夹是CI自带的,所以可以不用创建,当然如果你喜欢的话也能自定义其他的目录供Smarty使用) -
在项目的
config
文件夹中找到autoload.php
并修改以下行。$autoload['libraries'] = array('Cismarty');
-
在项目的
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! 的字样啦!