博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
smarty模板及其应用
阅读量:4707 次
发布时间:2019-06-10

本文共 8255 字,大约阅读时间需要 27 分钟。

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 = '}>'; //设置模板语言中的右结束符
View Code

二、应用示例

在使用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文件夹)找到相应文件显示在请求页面
View Code

显示模板页面:

这是主页面

登陆者是:
<{$name}>
年龄是:<{$age}>
地址是:<{$dizhi.qu}>
好友:<{$ren->name}>
View Code

注意: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");
View Code

主页面显示模板页面(timu.html)

主页面

请输入题目名称:
  所属科目:
 
<{foreach $shuju as $v}>
<{/foreach}>
题目名称 答案 所属科目 难度 类型 操作
<{$v[1]|truncate:15}> <{$v[2]|fontcolor}> <{$v[3]|kmname|fontcolor:red}> <{$v[4]|nandu}> <{typename code=$v[5]}> 删除
修改
<{$fpage}>添加数据
View Code

添加数据页面(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");
View Code

添加数据显示模板页面(add.html)

添加数据

请输入题目名称:
请输入选项A:   
请输入选项B:   
请输入选项C:   
请输入选项D:   
请输入答案:   
请输入科目:   
请输入题目难度:
请输入题目类型:
 
View Code

添加数据处理页面(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 "添加失败!"; }
View Code

删除数据页面(delete.php)

Query($sqlx,1);//再删除题目$sqlt = "delete from timu where code = '{
$code}'";$db->Query($sqlt,1);header("location:timu.php");
View Code

修改数据页面(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");
View Code

修改数据显示模板页面(update.html)

修改数据

请输入题目名称:
<{foreach $xuanxiang as $vx}>
请输入选项<{$vx[2]}>:   
<{/foreach}>
请输入答案:   
请输入科目:   
请输入题目难度:
请输入题目类型:
 
View Code

修改数据处理页面(updatechuli.php)

传递主键值过来,根据主键值来修改数据

Query($sql,1)){ //修改选项 for($i=0;$i
Query($sqlx,1); } header("location:timu.php");}else{ echo "修改失败!"; }
View Code

 注意: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自带的变量调节器与函数书写格式来写文件名称与方法。

 

转载于:https://www.cnblogs.com/xinghun/p/5560603.html

你可能感兴趣的文章
查找空座位问题
查看>>
几个简单规则改进你的SEO效果
查看>>
UVA10820 Send a Table
查看>>
主流css reset的讲解分析(转载)
查看>>
zookeeper 简介
查看>>
2017-2018-2 20179205《网络攻防技术与实践》第三周学习
查看>>
c/c++排坑(5) -- c语言中的申明
查看>>
sesion 详解
查看>>
Filter基金会
查看>>
白话经典算法系列之五 归并排序的实现
查看>>
HDU 1254 推箱子
查看>>
js获取url中的参数值
查看>>
论SOA架构的几种主要开发方式【转】
查看>>
iOS直播助手第一个版本总结
查看>>
jquery ajax/post 请求 案例
查看>>
缓存穿透,缓存击穿,缓存雪崩解决方案分析
查看>>
Java ActiveMQ队列模式案例
查看>>
Python使用代理的方法
查看>>
微服务化的道与术
查看>>
idea如何显示中文
查看>>