Codeigniter使用Smarty模板引擎之安装方法

为Codeigniter添加Smarty模板引擎的支持,网上方法都很详细,但是有些注意事项没有提到,这两天闲下来了,把具体步骤和注意事项再理一理。相信有这个需求的人对Codeigniter和Smarty都有一定了解,就对这两个东西不做介绍了。直接进入正题。

一、安装准备

1、Codeigniter,下载地址(下载最新版就好了)

2、Smarty,下载地址(下载最新版就好了)

3、codeigniter-smarty,下载地址 。这是个什么呢?它是一个Smarty的插件,它的作用是让Smarty可以支持Codeigniter,就这么简单。

二、基本原理

将Smarty集成到Codeigniter 中,

  • 首先我们需要安装Codeigniter和Smarty,并且它们能够正常工作,这个毫无疑问。
  • 其次我们需要为Smarty安装"codeigniter-smarty"插件,让Smarty有能力支持Codeigniter。
  • 而后我们需要为Codeigniter创建一个自定义类库,通过类库,我们可以将Smarty和Codeigniter集成到一起去。(这是所有步骤的关键
  • 最后验证安装成功与否。
下面简要说明一下我对这个集成框架模型的理解。如果你没有耐心可以放心的掠过这部分,直接进入下一步,这块是我备忘用的。下图是框架结构的相关部分,深蓝色框为框架部分,而白色框为application部分。这两个框架的集成是在应用层进行的,两个框架本身是不存在耦合的。在应用层通过扩展Codeigniter的类库来引入Smarty模板引擎。在此处,我把Smarty的模板(templates)和模板编译目录(templates_c)全部放入了Codeigniter应用中的views视图中,在不打破Codeigniter的MVC框架的基础上对两个框架进行集成,其实放到哪都可以,不过这个地方要注意模板路径的问题。如果这么集成,Codeigniter的“$this->load->view()”方法和等会会看到的“$this->smarty->view()”的寻址路径是不同的。并且因为路径造成的问题,往往比较隐蔽,不容易发现。我曾在咖啡厅泡了一下午来解决这个问题(当然有点夸张,其实还有别的问题)。Smarty会根据配置的templates_dir寻找模板,而Codeigniter则到application的views中寻找模板,这个需要注意。很显然,上述两个方法在程序中是可以同时存在的,那么应尽量避免同时使用。


三、安装Codeigniter

Codeigniter是一个轻量级的PHP框架,它采用MVC的思想来组织PHP程序。安装很简单,直接将下载的安装包解压后,放到你的服务器目录下即可。具体步骤如下:

1、解压缩Codeigniter安装包,得到如下内容:



2、将这个目录直接上传到你的服务器的根目录下即可,然后访问:http://localhost。如果你看到下边的页面,说明你成功了。


其他说明:如果你希望修改配置等,请参考官方手册:http://codeigniter.org.cn/user_guide/installation/index.html。上述步骤是最简单安装方式,但是如果上边你安装成功了,那么相信其他的问题都可以以此为起点一点点征服。 

四、安装Smarty

Smarty是比较著名的模板引擎,并且功能很强大,带缓存等。Smarty安装也是仅需要两个步骤,解压和上传。

1、将下载的Smarty安装包解压缩,得到下边目录。


2、在Codeigniter的system目录下建立libs/smarty目录


3、将smarty目录中的libs文件夹,上传到新建的Smarty目录下,形成如下目录结构

其他说明:如果你需要更高级的安装,请参看:http://www.smarty.net/docs/zh_CN/installing.smarty.basic.tpl

五、为Smarty安装插件codeigniter-smarty

codeigniter-smarty是一个Smarty插件,它为Smarty提供Codeigniter支持。安装类似于Smarty其他插件的安装,安装和Codeigniter一毛钱关系都没有。分为两步,解压和上传。

1、解压缩codeigniter-smarty,得到如下目录结构:


2、进入codeigniter-smarty/libs/smarty/libs/plugins,然后将所有文件复制到localhost/system/libs/smarty/libs/plugins目录下,就是把codeigniter-smarty中plugins中的东西都复制到smarty的plugins中,这样就完事了。



六、为Codeigniter添加Smarty支持(关键步骤)

1、在application/views目录下新建templates和templates_c两个目录。此处需要注意:如果你使用的是linux等系统,那么注意这两个目录的权限问题。

2、在application/librarys目录下,新建Smarty.php,并写入代码,代码如下:

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Smarty Class
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Smarty
 * @author		Kepler Gelotte
 * @link		http://www.coolphptools.com/codeigniter-smarty
 */
 //注意这个地方的路径必须能够找到和你的Smarty安装路径一致
require_once( BASEPATH.'libs/smarty/libs/Smarty.class.php' );

class CI_Smarty extends Smarty {

	function CI_Smarty()
	{
		parent::Smarty();

		$this->compile_dir = APPPATH . "views/templates_c";
		$this->template_dir = APPPATH . "views/templates";
		//如下四行是配置config和cache目录,还有模板的起止标志
		$this->config_dir = APPPATH . "config";
		$this->cache_dir = APPPATH . "cache";
		$this->left_delimiter = "<!--{";
		$this->right_delimiter = "}-->";
		
		$this->assign( 'APPPATH', APPPATH );
		$this->assign( 'BASEPATH', BASEPATH );

		log_message('debug', "Smarty Class Initialized");
	}

	function __construct()
	{
		parent::__construct();

		$this->compile_dir = APPPATH . "views/templates_c";
		$this->template_dir = APPPATH . "views/templates";
		//如下四行是配置config和cache目录,还有模板的起止标志
		$this->config_dir = APPPATH . "config";
		$this->cache_dir = APPPATH . "cache";
		$this->left_delimiter = "<!--{";
		$this->right_delimiter = "}-->";
		$this->assign( 'APPPATH', APPPATH );
		$this->assign( 'BASEPATH', BASEPATH );

		// Assign CodeIgniter object by reference to CI
		if ( method_exists( $this, 'assignByRef') )
		{
			$ci =& get_instance();
			$this->assignByRef("ci", $ci);
		}

		log_message('debug', "Smarty Class Initialized");
	}


	/**
	 *  Parse a template using the Smarty engine
	 *
	 * This is a convenience method that combines assign() and
	 * display() into one step. 
	 *
	 * Values to assign are passed in an associative array of
	 * name => value pairs.
	 *
	 * If the output is to be returned as a string to the caller
	 * instead of being output, pass true as the third parameter.
	 *
	 * @access	public
	 * @param	string
	 * @param	array
	 * @param	bool
	 * @return	string
	 */
	function view($template, $data = array(), $return = FALSE)
	{
		foreach ($data as $key => $val)
		{
			$this->assign($key, $val);
		}
		
		if ($return == FALSE)
		{
			$CI =& get_instance();
			if (method_exists( $CI->output, 'set_output' ))
			{
				$CI->output->set_output( $this->fetch($template) );
			}
			else
			{
				$CI->output->final_output = $this->fetch($template);
			}
			return;
		}
		else
		{
			return $this->fetch($template);
		}
	}
}
// END Smarty Class


上述代码,一方面是将Smarty和Codeigniter进行集成,提供一个公共的类库,以方便调用在Codeigniter中调用Smarty,另一方面其实是对Smarty进行配置(还记得在使用Smarty模板的时候,需要配置那四个路径吗?这里是一样的道理)。

3、让Codeigniter自动加载Smarty类库,方便调用。在codeigniter的config目录下,修改autoload.php中的$autoload['libraries'],自动加载类库smarty,如图:


OK,到此我们已经完成了集成。如果你是按照上边没有改动就完成了的话,那恭喜你,你已经将Smarty和Codeigniter集成到一起了。这样肯定是不放心的,来做一下简单的测试。

七、测试框架

1、测试Smarty框架

(1)、在application中controller目录下建立helloworld.php,并写入代码,代码如下:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Helloworld extends CI_Controller{
	function __construct(){
		parent::__construct();
	}
	public function index(){
		$this->smarty->testInstall();//大家都懂得
	}
}
(2)、在浏览器输入:http://localhost/helloworld



(3)、测试Smarty框架是否配置成功,如果上边报错,比如找不到路径或者权限问题,那请自行修改,如果你在此处遇到其他问题,也可以给我留言。

2、测试使用Smarty框架

(1)、首先建立模板,在application/views/templates目录下,新建模板文件index.tpl,代码如下:
<h1>Hello,<!--{$name}--></h1>

(2)、然后建立控制器,在application/controller目录下,新建test.php,代码如下:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends CI_Controller{
	function __construct(){
		parent::__construct();
	}
	public function index($page='index'){
		$this->smarty->assign('name', 'forevernull');
		$this->smarty->view('index.tpl');
	}
}
(3)、然后再浏览器输入:http://localhost/test,将看到如下输出:


(4)、OK,大功告成,终于写完了!如果你在上边遇到任何问题,也可以联系我,给我留言是免费的哦!

八、总结

一直觉得挺简单的,写出来真的不容易。其实这两个框架的使用是很灵活的,我只是抛砖引玉,如果你对上述过程熟悉了,你可以更改任何配置。如果你能够读到这里,我真的很佩服你!

九、参考资料

1、CodeIgniter+Smarty - Perfect Together

2、Codeigniter 安装指导

3、Smarty基础安装



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值