Smarty是一个使用写出来的,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
一、安装
下载最新版本的Smarty。解压下载的文件。
安装实例:
(1) 在根目录下建立新的目录Project/,将刚才出来的目录的libs/拷贝到Project/里,再在Project/里新建cache/,templates/,templates_c/, configs/,plugins/。
(2)在Project目录下新建init.inc.php文件作为配置文件,代码如下:
//$smarty -> auto_literal = false; //就可以让定界符号使用空格$smarty->setTemplateDir(ROOT.'templates/'); //设置所有模板文件存放位置//$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹$smarty->setCompileDir(ROOT.'templates_c/'); //设置编译过的模板存放的目录$smarty->addPluginsDir(ROOT.'plugins/'); //设置为模板扩充插件存放目录$smarty->setCacheDir(ROOT.'cache/'); //设置缓存文件存放目录$smarty->setConfigDir(ROOT.'configs/'); //设置模板配置文件存放目录$smarty->caching = false; //设置Smarty缓存开关功能$smarty->cache_lifetime = 60*60*24; //设置缓存模板有效时间一天$smarty->left_delimiter = '<{'; //设置模板语言中的左结束符$smarty->right_delimiter = '}>'; //设置模板语言中的右结束符
二、应用示例
在使用smarty模板时,只需将init.inc.php配置文件引入即可。因为在配置文件中已经有smarty实例化的对象,所以可以直接拿来用。
请求smarty页面(不用显示,所以是纯php页面):
"淄博","qu"=>"张店");class Ren //类{ public $name = "王五"; }$r= new Ren();$smarty->assign("name",$name);$smarty->assign("age",$age);$smarty->assign("dizhi",$attr);$smarty->assign("ren",$r);$smarty->display("main.html");//显示模板页面,只需写文件名即可,samrty会根据模板文件存放位置(即templates文件夹)找到相应文件显示在请求页面
显示模板页面:
这是主页面
登陆者是: <{$name}>年龄是:<{$age}>地址是:<{$dizhi.qu}>好友:<{$ren->name}>
注意:1.注册变量用assign()方法,显示模板用display()方法,这都需要用对象去调用,而且没有提示,只能手写。
2.用于显示的模板放在templates目录下,调用smarty时写在分界符<{ }>里面
三、例题
用smarty实现试题题目的显示和数据的增删改查
创建页面:
主页面(timu.php)
StrQuery($sqlt);$page = new Page($total,3);//SQL语句查询timu表所有信息并分页显示$sql = "select * from timu ".$ftj.$page->limit;$attr = $db->Query($sql);//调用分页信息方法$fpage = $page->fpage();//查科目$sqlk = "select * from kemu";$attrk = $db->Query($sqlk);//注册变量$smarty->assign("fpage",$fpage);$smarty->assign("kemu",$attrk);$smarty->assign("shuju",$attr);//显示模板$smarty->display("timu.html");
主页面显示模板页面(timu.html)
主页面
题目名称 | 答案 | 所属科目 | 难度 | 类型 | 操作 |
<{$v[1]|truncate:15}> | <{$v[2]|fontcolor}> | <{$v[3]|kmname|fontcolor:red}> | <{$v[4]|nandu}> | <{typename code=$v[5]}> | 删除 修改 |
添加数据页面(add.php)
Query($sqlk);$sqln = "select * from timunandu";$attrn = $db->Query($sqln);$sqlt = "select * from timuleixing";$attrt = $db->Query($sqlt);$smarty->assign("kemu",$attrk);$smarty->assign("nandu",$attrn);$smarty->assign("type",$attrt);$smarty->display("add.html");
添加数据显示模板页面(add.html)
添加数据
添加数据处理页面(addchuli.php)
Query($sql,1)) { //添加选项 $id = $db->conn->insert_id;//取上一次添加的主键值 //主键值是自增长,必须通过对象去调用 if(empty($a)) { } else { $sqla = "insert into xuanxiang values('','{ $a}','A','{ $id}')"; $db->Query($sqla,1); if(empty($b)) {} else { $sqlb = "insert into xuanxiang values('','{ $b}','B','{ $id}')"; $db->Query($sqlb,1); if(empty($c)) {} else { $sqlc = "insert into xuanxiang values('','{ $c}','C','{ $id}')"; $db->Query($sqlc,1); if(empty($d)) {} else { $sqld = "insert into xuanxiang values('','{ $d}','D','{ $id}')"; $db->Query($sqld,1); } } } } header("location:add.php"); }}else{ echo "添加失败!"; }
删除数据页面(delete.php)
Query($sqlx,1);//再删除题目$sqlt = "delete from timu where code = '{ $code}'";$db->Query($sqlt,1);header("location:timu.php");
修改数据页面(update.php)
Query($sqlt);$sqlx = "select * from xuanxiang where timu = '{ $code}'";$attrx = $db->Query($sqlx);//var_dump($attrx);//因为要用下拉列表显示,所以要查询所有信息$sqlk = "select * from kemu";$attrk = $db->Query($sqlk);$sqln = "select * from timunandu";$attrn = $db->Query($sqln);$sqll = "select * from timuleixing";$attrl = $db->Query($sqll);//注册变量$smarty->assign("timu",$attrt);//题目$smarty->assign("xuanxiang",$attrx);//选项$smarty->assign("kemu",$attrk);//科目$smarty->assign("nandu",$attrn);//难度$smarty->assign("type",$attrl);//类型$smarty->display("update.html");
修改数据显示模板页面(update.html)
修改数据
修改数据处理页面(updatechuli.php)
传递主键值过来,根据主键值来修改数据
Query($sql,1)){ //修改选项 for($i=0;$iQuery($sqlx,1); } header("location:timu.php");}else{ echo "修改失败!"; }
注意:1.分页时SQL语句一定要注意前后空格
2.删除数据时先删除选项,再删除题目
3.smarty模板前台显示需要查询数据库时,要在后台php页面查询,再注册smarty变量存储查询信息,然后前台再去调用smarty变量。
四、smarty变量调节器与函数
在主页面显示模板页面用到了几个smarty变量调节器与函数,有些是smarty自带的(在Project/libs/plugins/目录下),有些是自定义的(Project/plugins/目录下)
下面是自定义的几个:
1.自定义变量调节器改变字体颜色(modifier.fontcolor.php):
{ $str}";//返回一个替换了颜色的字符串}
2.自定义变量调节器将科目代号转换为科目名称(modifier.kmname.php)
query($sql); $attr = $result->fetch_row(); return $attr[0];}
3.自定义变量调节器将难度代号转换为难度名称(modifier.nandu.php)
query($sql); $attr = $result->fetch_row(); return $attr[0];}
4.自定义函数将题目类型代号转化为类型名称(modifier.typename.php)
query($sql); $attr = $result->fetch_row(); return $attr[0]; }
自定义的都存在Project/plugins/目录下,一定要注意书写格式,必须严格按照smarty自带的变量调节器与函数书写格式来写文件名称与方法。