博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
一、初始webpack
查看>>
游标Cursor
查看>>
SQL Server用表组织数据
查看>>
Java设计模式——适配器模式
查看>>
[BZOJ1876][SDOI2009]superGCD(高精度)
查看>>
selenium的句柄
查看>>
实验四附加实验 项目互评
查看>>
利用GPU实现大规模动画角色的渲染
查看>>
POJ---2524 Ubiquitous Religions[简单并查集]
查看>>
[SCOI2005]王室联邦
查看>>
CodeForces - 1016D Vasya And The Matrix
查看>>
angularjs 中的iframe 标签 ng-src 路径
查看>>
cURL error 60: SSL certificate problem...
查看>>
05-图3. 六度空间 (30)
查看>>
MongoDB 基本使用
查看>>
.NET框架 - NETCORE部署IIS
查看>>
采购申请审批策略增强
查看>>
算法笔记_223:打印回型嵌套(Java)
查看>>
机器学习 -- 文本挖掘
查看>>
某单位排队形,开始排成3路纵队,末尾多出2个人,后改称5路纵队,末尾又多出3个人 ,后改成7路纵队,正好没有余数,求单位总人数...
查看>>