说道框架(framework)那么必须要提到smarty模板,在面试时你可以不会任何的框架,但是如果不会smarty模板,那么面试官会认为你在说谎,因为几乎所有的框架都是基于或借鉴smarty。
一、smarty模板介绍
基于面向对象编程思想封装的类,实现前后台代码分离,降低耦合度,并且为后续的分工合作开发做准备。Smarty(轻量,微小)是编译性模板框架,体积小、速度快,支持缓存、全局站点配置等功能,是“旅行居家”开发必备神器!
二、使用步骤
1、在官网www.smarty.net 下载最新版,解压,复制libs文件夹到项目目录;
2、在对应的项目目录下创建4个文件夹分别为模板文件夹(保存前台页面,必须,一般命名为templates)、编译(自动整理前后台页面,从第二次访问开始不需要重新重新整合,一般命名为templates_c,compile必须)、配置文件夹(应用于整个站点的配置)、缓存文件夹
3、测试
新建一个后台页面index.php
<?php
//引入核心类库文件
include_once('libs/Smarty.class.php');
//实例化类
$smarty=new Smarty();
//定义配置
//用户访问的后台页面所有的路径都是应该以访问后台页面作为参照物!!!
$smarty->setTemplateDir('templates');//定义模板路径
//定义编译路径
$smarty->setCompileDir('templates_c');
//定义配置文件路径
$smarty->setConfigDir('config');
//定义缓存路径
$smarty->setCacheDir('cache');
//修改默认定界符避免和JS冲突!!!
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
新版本:
$smarty->setLeftDelimiter('<{');//指定左定界符,避免和JS冲突
$smarty->setRightDelimiter('}>');
$test='我是test变量';
$smarty->assign("test",$test);//建议注册的变量名和键保持一致
//注册一个索引数组
$smarty->assign("arr1",array('a','b','c'));
//注册一个引用数组,section无法用于引用数组
$smarty->assign("arr2",array("a"=>1,"b"=>2,"c"=>3));
//开启调测
//$smarty->debugging=true;
//自动整理前后台页面
$smarty->display('index.tpl');
$smarty->assign('test1','test1');//这个变量无法使用,想一想为什么?
?>
在templates文件加新建index.tpl文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
我是网站根目录下index.php的前台index.tpl页面<br />
输出后台变量test的值:<font color="red" style="font-weight:bold;"><{$test}></font>XXXX<br />
该变量无法输出:<{$test1}><br />
遍历输出索引数组:
<{section name=i loop=$arr1}>
索引:<{$smarty.section.i.index}>值:<{$arr1[i]}>
<{sectionelse}>
没有符合的记录
<{/section}>
<br />
遍历引用数组(用foeach,foreach也可以用于索引数组):
<{foreach from=$arr2 item=v key=k}>
键:<{$k}>值:<{$v}>
<{foreachelse}>
没有符合的记录集
<{/foreach}>
<br />
新版本写法:
<{foreach $arr2 as $k=>$v}>
键:<{$k}>值:<{$v}>
<{/foreach}>
</body>
</html>
访问后台页面!!!!!测试结果
三、变量解析
后台注册,语法 $smarty对象->assign(‘键’,mixed 值);
前台在需要的位置显示,语法 {$键}
四、开启调测
$smarty->debugging=true;
五、编译原理
smarty模板调用display函数自动整合前后台页面,是从templates文件夹下查找前台地址自动把访问的后台php页面和该前台页面替换成内嵌PHP代码,生成编译文件,文件名XXX.前台模板名.tpl.php,第二次访问自动把这个页面相应给用户,加快速度,只要PHP后台代码不改变,这个编译页面就不会再次生成。