未分类

最后通过一些简单的模板语法把数据显示出来,这一节主要来介绍一下如何在smarty中开始我们程序设计

20 4月 , 2020  

一.介绍
未来在支付WEB应用的时候,比较盛行的一种做法正是行使“MVC”布局,使用那样方法去开荒WEB应用程序,逻辑性强、简浩明了,使程序设计起来越发有利,飞速。何为“MVC”呢?轻便的来讲,它便是“模型”及“调整器”的结合体,也正是全体的“三层”抽象构造,当然这里所说的“MVC”是针对WEB上行使来讲的,“使代码和页面设计分开”就是其主导思想,这一考虑在行使Java
Servlet/JavaServer
Pages本事的“Struts”中表现的淋漓,有意思味的可以去
从PHP5的临蓐可以观望,此中的面向对象作用尤其周详,使用PHP来支付大型的商业网站或然分布式公司应用已经产生也许,借使再组成Zend
Optimizer,已经落成了代码的封装性。
怎么样在PHP中央银行使“MVC”设计情势去支付WEB应用呢?记住一点,用三个轻巧的例证演示一下,举例要从数据库中查询出会员的资料以展现在网页上,这里就需求酌量到两点:1.连接数据库并抽取会员资料,2.把会员资料展现在网页上,连接数据库我们接纳一个数据库的类,把它称为“DB”类吧,这么些类那个时候就饰演了“模型”的剧中人物,接着大家须要编写制定二个操作“DB”类的次第以收取数据,那几个顺序所扮演的角色正是“调节器”,它负担客商端“POST”或“PUT”的数额,然后再调用“DB”类以抽取数据,把这个数据都贮存在“调整器”中,最终把数量传递给“视图”并遵照一定的排版格式显示出来,从上边的深入分析能够观望,模板在这里地正是扮演了“视图”的剧中人物,当然仅仅一个模板类是无法说成是MVC的,真正的MVC不是如此轻松的,具体能够参见一下“JSF”。
“3t”是二个模板类,首假若读取“调节器”的数据并开展部分破例管理,最终经过某些简便的沙盘语法把多少显示出来,它兼具局地如何的性子吗?
深入解析速度快,能够依照须求选用接受html格局缓存或php格局缓存,当然你也足以不用缓存,相同能够兑现连忙牢固的WEB应用
使用简易、安装操作方便,在数量的读取方面好像着超模板类“SMARTY”,在数额显示上边即相像“PHP的语法”又好像“JavaBeans”
可扩大性好,你能够依照须求每天参预你想要的效果,因为它是开源的,在不久的日子里,将扶持插件功效伸缩性好,帮助最新的PHP5,只要你的PHP版本>=4.0.6就能够使用,当然你需求有在服务器操作文件的权能
效用强大,扶植模板的不可胜言嵌套,数组多级循环等等
当然此模板还需周详之处重重,有待在各样条件测量试验使用本领不断康健,这两天仅在LINUX和WINDOWS遇到下测验通过.
二.安装 1.解压后应该能够观望如下目录构造: ./3tx.x/cmp/ 编写翻译后的文书
./3tx.x/tpl/ 模板文件 ./3tx.x/che/ 缓存文件贮存的文本夹
./3tx.x/ttt/ttt.php 3T模板类公事 ./3tx.x/ 程序文件
2.您的PHP版本无法低于PHP4.0.6,作者提议你的PHP版本跳级至4.3.0之上,程序的完整品质将获得会大幅度升高3.运维时如现身变量未定义请在前后相继前增加”error_reporting;”函数 三.语法
模板轻易语法表明:
经常接纳右边大括号”{“和左手大括号”}”作为模板语法的发端和得了,当然也足以采纳自定义的分隔符,如使用”[“和”]”,以下表明以大括号为分隔符举办表明(注;下边的[tplCode]和[/tplCode]中级的代码才是模板语法代码)1.在模板文件中应用PHP代码,如: [tplCode] {php} $i = 3; echo $i; {/php}
[/tplCode] 请参照他事他说加以考查”example6″ 2.在模板中央银行使foreach循环,如:
第一种用法(循环数组$a,也正是PHP中的foreach [/tplCode]
{foreach:$a,$k,$v} $v = {$v}
{/foreach} [/tplCode]
第二种用法(能够设定循环三次,借使数组$a有14个要素,则下边包车型大巴巡回则只取最前边5个卡塔尔国
[tplCode] {foreach:$a,$k,$v,5} $v = {$v}
{/foreach} [/tplCode]
第三种用法(能够设定循环一回,若是数组$a有14个要素,则下面包车型地铁轮回则从第1个成分开始,取到第5个元素甘休State of Qatar
[tplCode] {foreach:$a,$k,$v,3,5} $v = {$v}
{/foreach} [/tplCode]
请参照他事他说加以考察”example1″和”example3″,在”foreach”循环中得以使用多维数组,具体请看”example10″
3.在模板中应用IF语句,如: 第一种用法 [tplCode] {if:$a == “hello”}
变量$a的值是”hello” {/if} [/tplCode] 第二种用法 [tplCode] {if:$a ==
true} 变量$a为真 {else} 变量$a不为真 {/if} [/tplCode] 第两种用法
[tplCode] {if:$a == 2} 变量$a的值为2 {elseif:$a == 3} 变量$a的值为3
{/if} [/tplCode] 具体使用请参考”example2″及”example6″
4.在模板中包涵模板文件,如: {tplCode} {includetpl:head.tpl} {/tplCode}
这里带有了模版文件”head.tpl”,所蕴藏的模板文件必得在同一个索引下
5.在模板中包罗PHP文件,如: {tplCode} {includephp:head.php} {/tplCode}
这里带有了PHP文件”head.php”,文件”head.php”在现阶段前后相继目录下
蕴含文件请看”example8″ 6.在模板中输出时间,如: {tplCode} {date:Y-m-d
H:i:s} {/tplCode} 后边的”Y-m-d
H:i:s”字符串是明媒正娶的PHP时间标志,具体运用能够参照他事他说加以考察PHP手册
具体行使请参见”example7″ 7.在模板中央银行使数学函数 第一种用法,直接出口结果
{tplCode} {math:3*2-5} {/tplCode} 第三种用法,赋值给钦赐变量 {tplCode}
{math:3*2-5,$result} {/tplCode}
第三种用法,赋值给钦命变量,第4个参数设置是或不是及时输出,设为”Y”输出,”N”不出口
{tplCode} {math:3*2-5,$result,Y} {/tplCode} 具体行使请参见”example4″
8.在模板中应用FOHaval循环 如下代码所示 [tplCode] {for:5,1000,1,$i} {$i}
{/for} {/tplCode} 参数表达: 5:表示从5最早循环 1000:表示循环到1000得了
1:表示每一次循环的增量为1,相当于$n++ $i:表示收获每一遍循环的值
(上面的”5″,”1000″,”1″之类的常数也可用变量来代替,如:{for:$num,$max,$step,$i},此中的变量是在前后相继使得”assign
也参照如下代码: [tplCode] {for:500,30,-2,$i}
从500开首循环,每一趟减2,直到30才甘休,当前巡回的值是:{$i}
{/for} {/tplCode} 具体使用请仿照效法”example2″,”example11″
9.在模板中应用Email标签 第一种用法: [tplCode] {email:redhat@hnwj.net}
[/tplCode] 第二种用法: [tplCode]
{email:redhat@hnwj.net,Redhat的邮箱} [/tplCode] 第三种用法:
[tplCode]
{email:redhat@hnwj.net,那是”Redhat”的邮箱那些是带样式的class=m,m}
[/tplCode] 具体运用请参谋”example5″ 10.在模板中定义变量 [tplCode]
{assign:$tplVar,那是自己定义的变量能够在模板中输出也可用PHP代码输出}
[/tplCode] 具体使用请参见”example6″. 11.任何语法及功用尚在付出中……
有好的观念或主张请去
注: 1.本模板扶持多层嵌套的沙盘模拟经营或PHP文件,扶助多层foreach或for循环
2.实际上接受本事在实质上接纳进度中只要把质量$cmpCheck设置为true则每一回运维都会编写翻译PHP程序,不然程序会根据编译后的PHP文件的存在时间长短决断是不是要双重编译该属性默值即为true,平日在正在接受中才设为false
设置情势如:$tttObj->setCmpCheck;
3.本程序最大的老毛病正是不能够纯粹的捕捉程序中冒出的语法错误消息4.暂不扶持缓存功能,要是你有好的主张不妨告诉笔者:-)5.出于选择的是混编情势编写翻译模板为PHP文件,所以请不要输错了(当然模板是支撑大小写一致的写法的,也正是说你写贰个{math:38*7}和{MatH:38*7}的效果与利益是一成不变的卡塔尔(قطر‎,如输入”{foreach:$data,k,$v}”编写翻译将透过,但运营的时候会形成叁个语法错误,因为内部的”k”前边少了一个”$”符号.本来早已写好了对每一行开展语法分析捕捉错误的代码,但发今世码到达几百行的时候占用时间相比较长,要是代码少之又少还可以够,但如果超多的话会招致品质的下落.並且PHP本人就有很科学的失误音信提醒,后来想一想就不曾去开展每行代码的分析了.
6.不知大家是否注意到,在以上的标志中,参数都是不带引号或双引号的 四.使用
1.创设PHP文件(命名称为first.php,保存在当前目录下,即”./”卡塔尔(قطر‎,内容如下:
setTplDir;//要求编写翻译的沙盘模拟经营文件存放目录
$ttt->setCmpDir;//编写翻译后文件的寄存目录 $ttt->assign;//设置变量
$ttt->assign(‘content’,’紫北京蓝,天气不错,万里无云,晴’卡塔尔(قطر‎;//设置变量
$ttt->assign;//设置变量 $ttt->display;//输出 ?>
2.建设布局tpl文件(命名叫”first.tpl”,保存在目录”./tpl/”下State of Qatar.内容如下:

6:$smarty->left_delimiter与$smarty->right_delimiter:
指明在查找模板变量时的左右分割符。暗许境况下为”{“与”}”,但在实质上中因为我们要在模板中利用<script>,Script中的函数定义难免会使用{},即使它有温馨的解决办法,但习于旧贯上大家将它再也定义
为”{#”与”#}”或是””或别的标识符,注意,如若在这里处定义了左右分割符后,在模板文件中相应的要使每三个变量使用与概念相近的符号,比如在这里边钦定为”<{“与”}>”,htm模板中也要
相应的将{$name}形成<{$name}>,那样程序才方可准确的找到模板变量。

 

{$foot}
3.在浏览器浏览.
4.越来越多例子请看程序自带的”example”类别… 五.类属性
$tplDir:String,”./tpl/” 模板文件的目录,供给加载的沙盘就从这里加载
$cmpDir:String,”./cmp/” 编写翻译后的PHP文件贮存目录 $cheDir:String,”./che/”
$tplFile:String,”” 模板文件,所要解析的模板主文件 $startLeft:String,”{”
模板变量的左边界符号,能够和睦通过setLeft方法去设置
$startRight:String,”}”
模板变量的侧面界标志,能够团结通过setRight方法去设置 六.类方法
类布局器,能够在这里直接设置要求深入分析的沙盘模拟经营,如:$obj->TTT; setLeft
设置模板变量”$startLeft”的左侧界,该变量默许为”{” setRight
设置模板变量”$startRight”的侧边界,该变量默感到”{” setTplDir
设置模板的贮存路线,此办法的同名方法是”setTemplatesFile
设置模板编写翻译后的寄存路线,此措施的同名方法是”setCompilesFile
设置缓存的模版文件目录,此情势的同名方法是”setCachesFile(卡塔尔”
setCacheFilter
当使用了模版的缓存功效时,使用此办法设置的文本将不被缓存处理setWordsFilter
设置不宜在网址上出示的字符或字符串,如:$ttt->setWordsFilter;,把网页中的全部”abc”替换到”xyz”;
setWordsFile
当设置了不当在网址上海展览中心示的字符或字符串时,用此措施设置的公文中的字符或字符串将会不受”setWordsFilter(卡塔尔国”方法影响而直白突显setQuery
此方法只在应用了模版的缓存作用时才使用,首若是用来安装唯一的一串字符以使缓存文件不会另行,若无安装的话模板也会自动获取但会使程序变的不安全,只要不断的向程序GET不相同的参数变会从来生成分歧的缓存文件,N时间后,小编想你服务器的硬盘就没空间了,当然这一个只有在您选择了缓存成效并未利用此措施设置独一字符串所产生的,所以正确安装并在程序中拍卖部分GET或POST的值就显的很器重。可以像这么使用此措施”$ttt->setQuery(“typeid=$tid&msgid=$sid”卡塔尔国”,这里要注意当恶意顾客提交分化的$tid或$sid时也会引致上述的抨击事件,所以必需在前后相继中捕捉到违规的$tid和$sid并甘休实践”$ttt->display(State of Qatar”方法。
assign
设置在模板中要用到的变量,第一个参数为模板中要用到的变量,第二个参数为顾客定义的值,如下:
$obj->assign; $obj->assign(‘userID’,array; display
输出深入深入分析后的沙盘模拟经营,参数为要出口的模版文件名(借使在类的初步化或选用了办法”setTplFile(卡塔尔”已经安装过,在利用本方法时可以不用带参数卡塔尔国

7:$smarty->cache(“./cache”):
报告斯马特y输出的模板文件缓存的职责。上一篇大家精晓斯Matty最大的帮助和益处在于它能够缓存,这里正是设置缓存的目录。暗许景况下为当前目录下的cache目录,与templates_c目录卓殊,在linux系统中
大家要保管它的可读可写性。

模板文件:example.htm

{$content}

出口结果:

斯Matty将使用在cache被确立时采纳cache_lifetime那一个值。习于旧贯上采取true与false来代表是不是开展缓存。

{$title}

{section name=name loop=$varName[,start=$start,step=$step,max=$max,show=true]}

长期以来,{section}也能够相配使用{sectionelse},用来表示传入的数组变量为空时对模板实行的管理。

中间,from
提出要循环的数组变量,item为要循环的变量名称,循环次数由from所钦命的数组变量的个数所决定。{foreachelse}用来当程序中传送过来的数组为空时的拍卖,上面是三个精练的事例:

小编们能够看出,smarty的次第部分其实正是切合php语言标准的一组代码,我们每个来解释一下:

长久以来,{section}也能够相称使用{sectionelse},用来代表传入的数组变量为空时对模板进行的拍卖。
小编们把上面的十分例子使用{section}来代表{foreach}来兑现现样的效劳,注意,在这里个例子中自笔者只将tpl模板中的{foreach}用{section}来贯彻,php程序文件中一直不任何改动,同期加了{sectionelse}管理块:
example.tpl模板文件如下:

name: section的名称,不用加$ 

$loop: 要循环的变量,在程序中要使用assign对这个变量进行操作。 

$start: 开始循环的下标,循环下标默认由0开始 

$step: 每次循环时下标的增数 

$max: 最大循环下标 

$show: boolean类型,决定是否对这个块进行显示,默认为true

二、解释smarty的程序
笔者们可以看看,smarty的次第部分其实正是顺应php语言规范的一组代码,大家每一种来解释一下:

 

抑或要先知道这么些定义 然后再深造 金锄头的模板引擎不用学
最重大依然学一种通用的沙盘模拟经营引擎 比方斯Matty
提议找个会PHP的面对面和您讲讲Smarty在PHP端的知识 那样你好掌握一些
学会一种模板引擎 也精通了沉思 其余模板引擎也正是写克罗地亚共和国语法上的不相似而已

指明在查找模板变量时的左右分割符。私下认可情形下为”{“与”}”,但在事实上中因为我们要在模板中利用<script>,Script中的函数定义难免会使用{},即使它有投机的灭绝办法,但习于旧贯上大家将它再也定义

这里将输出一个数组:
新闻编号:1
新闻内容:第1条新闻
新闻编号:2
新闻内容:第2条新闻
新闻编号:3
新闻内容:第3条新闻
新闻编号:4
新闻内容:第4条新闻
新闻编号:5
新闻内容:第5条新闻
新闻编号:6
新闻内容:第6条新闻

程序实践完后大家能够张开当前目录下的templates_c与cache目录,就能意识在底下多出有个别%%的目录,这一个目录便是斯马特y的编写翻译与缓存目录,它由程序自动生成,不要一向对那一个变迁的文件举办改过。

三、模板表明
接下去介绍三个section循环块与foreach循环块,本来它应该归于模板部分,但是由于它们是smarty的精粹所在,何况与smarty程序设计某个关联特别连贯,所以就在这里拿出去讲一下。

二:解释smarty的程序

参数解释如下:
name: section的名称,不用加$
$loop: 要循环的变量,在前后相继中要利用assign对那么些变量举办操作。
$start: 开头循环的下标,循环下标暗许由0早先
$step: 每一遍循环时下标的增数
$max: 最大循环下标
$show: boolean类型,决定是或不是对这么些块进行体现,默感到true

 

11:$smarty->display(“index.tpl”):
该函数原形为display(string
varname卡塔尔(قطر‎,效用为显示一个模板。不问可以预知,它将深入分析管理过的沙盘模拟经营呈现出来,这里的模版文件不用加路径,只要使用三个文件名就可以了,它路径大家早就在$smarty->templates(string
path卡塔尔中定义过了。
程序施行完后大家得以张开当前目录下的templates_c与cache目录,就能发以往底下多出部分%%的目录,那几个目录就是斯Matty的编译与缓存目录,它由程序自动生成,不要间接对那么些变迁的文本实行更换。

上述作者轻松的把Smarty程序中的一些常用的中坚要素介绍了一晃,在前面包车型客车例证中您可以看出将它们将被反复的利用。

②. section:
section的发出是为缓慢解决foreach的阙如的,与foreach同样,它用于设计模板内的循环块,它相比较复杂,可大幅程序上知足程序须要,所以在程序中本人习贯使用它而不接受foreach,基本精气神为:

在smarty的模板设计某个自个儿简单的把smarty在模板中的一些常用设置做了简便的牵线,这一节重视来介绍一下怎么着在smarty中起头大家前后相继设计。下载斯Matty文件放到你们站点中。
index.php PHP代码:

www.2979.com ,模板引擎是一个用来前端渲染 前后端分离的机件
各个Web框架都能够引进模板引擎,有部分Web框架达成了和煦的沙盘模拟经营引擎
像金锄头的模版引擎是和谐完结的 所以找不到文书档案,其它有一部分第三方支付的沙盘模拟经营引擎组件 比如smarty twig用于php
jade用于Nodejs Velocity用于Java 这一类第三方日常都能够找得到文书档案

{section}块具备的属性值,分别为:

这里将输出一个数组:

{section name=loop loop=$News} 
新闻编号:{$News[loop].newsID} 
新闻标题:{$News[loop].newsTitle}
 {sectionelse} 
对不起,没有任何新闻输入!
 {/section}

 

程序文件:example.php如下:

该函数原形为display(string
varname卡塔尔,功能为显示三个模板。简单的说,它将深入分析管理过的模板呈现出来,这里的模板文件不用加路线,只要利用叁个文书名就可以了,它路径大家已经在$smarty->templates(string
pathState of Qatar中定义过了。

常用PHP模板有:斯Matty,Blade,Mustache,假若Node.js作为服务端,前端模板渲染的模块:ejs,doT,jade。

 

这里将输出一个数组:
新闻编号:1
新闻内容:第1条新闻
新闻编号:2
新闻内容:第2条新闻
新闻编号:3
新闻内容:第3条新闻
新闻编号:4
新闻内容:第4条新闻
新闻编号:5
新闻内容:第5条新闻
新闻编号:6
新闻内容:第6条新闻

 

<?php
include_once("./Smarty/Smarty.class.php"); 

$smarty = new Smarty();            //建立smarty实例对象$smarty

$smarty -> templates("./templates");//设置模板目录
$smarty ->templates_c("./temlpates_c");//设置编译目录

$smarty ->cache("/cache");  //缓存目录
$smarty ->cache_lifetime = 0; //缓存时间
$smarty ->caching =true;   //缓存方式

$smarty ->left_delimiter = "{#";
$smarty ->right_delimiter = "#}";

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻"); 
$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻"); 
$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻"); 
$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻"); 
$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻"); 
$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻"); 

$smarty ->assign("newsArray","$array");//进行模板变量替换
$samrty ->display("example.htm");  //编译并显示位于./templates下的index.html模板
?>

 

8:$smarty->cache_lifetime = 60 * 60 * 24:
此间将以秒为单位打开总结缓存有效的年月。第一遍缓存时间到期时当斯马特y的caching变量设置为true时缓存将被重新创设。当它的取值为-1时意味着建设构造起的缓存从不误点,为0时表示在程序每便实践时缓
存总是被重建。下边的装置表示将cache_lifetime设置为一天。

<? 
/********************************************* 

* 文件名: example7.php 

* 作 用: 显示实例程序2 

*********************************************/ 

include_once("./comm/Smarty.class.php"); 

$smarty = new Smarty(); 

$smarty->templates("./templates"); 

$smarty->templates_c("./templates_c"); 

$smarty->cache("./cache"); 

$smarty->cache_lifetime = 0; 

$smarty->caching = true; 

$smarty->left_delimiter = "{"; 

$smarty->right_delimiter = "}"; 

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻"); 

$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻"); 

$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻"); 

$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻"); 

$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻"); 

$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻"); 

$smarty->assign("newsArray", $array); 

//编译并显示位于./templates下的index.tpl模板 

$smarty->display("example.tpl"); 

?>

<?php
/**
@version $Id:index.php
@package
@author jill
@action 显示实际程序
*/

include_once("./Smarty.class.php");//包含smarty类文件

$smarty = new Smarty();            //建立smarty实例对象$smarty

$smarty -> templates("./templates");//设置模板目录
$smarty ->templates_c("./temlpates_c");//设置编译目录

$smarty ->cache("/cache");  //缓存目录
$smarty ->cache_lifetime = 0; //缓存时间
$smarty ->caching =true;   //缓存方式

$smarty ->left_delimiter = "{#";
$smarty ->right_delimiter = "#}";

$smarty ->assign("name","zhaocha");//进行模板变量替换
$samrty ->display("index.html");  //编译并显示位于./templates下的index.html模板
?>

数据库中从不音信输出!

10:$smarty->assign(“name”, “zaocha”):
该数的原型为assign(string varname, mixed
varState of Qatar,varname为模板中选用的模板变量,var建议要将模板变量替换的变量名;其第两种原形为assign(mixed
var卡塔尔国,大家要在后边的事例详细的执教这么些成员函数的选用办法,assign是斯Matty的主导函数之一,全数对模板变量的交替都要运用它。

告知Smarty输出的模版文件缓存的岗位。上一篇大家明白斯Matty最大的优点在于它能够缓存,这里正是安装缓存的目录。私下认可情状下为当前目录下的cache目录,与templates_c目录特别,在linux系统中

foreach 输出一个“二维关联数组”的数据:
{#foreach item=new from=$news#}
新闻编号:{#$new.id#}
新闻内容:{#$new.title#}
{#foreachelse#}数据库中没有新闻输出!
{#/foreach#}
{foreach from=$newsArray item=newsID}新闻编号:{$newsID}新闻内容:{$newsTitle}{foreachelse}对不起,数据库中没有新闻输出!
{/foreach}
  1. index: 上面大家介绍的”循环下标”,私下认可为0

  2. index_prev: 当前下标的前多少个值,默感到-1

  3. index_next: 当前下标的下贰个值,默感到1

  4. first: 是还是不是为率先下循环

  5. last: 是或不是为末段二个巡回

  6. iteration: 循环次数

  7. rownum: 当前的行号,iteration的另多少个小名

  8. loop: 最终三个循环号,可用在section块后总结section的巡回次数

  9. total: 循环次数,可用在section块后总结循环次数

  10. show: 在函数的扬言中有它,用于判别section是或不是出示

2:include_once语句:
它将设置到网址的smarty文件包罗到当前文件中,注意富含的不二秘技一定要写正确。

<? 
/********************************************* 

* 文件名: example.php 
* 作 用: 显示实例程序2 
*********************************************/ 

include_once("./Smarty/Smarty.class.php"); 

$smarty = new Smarty(); 

$smarty->templates("./templates"); 

$smarty->templates_c("./templates_c"); 

$smarty->cache("./cache"); 

$smarty->cache_lifetime = 0; 

$smarty->caching = true; 

$smarty->left_delimiter = "{#"; 

$smarty->right_delimiter = "#}"; 

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻"); 

$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻"); 

$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻"); 

$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻"); 

$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻"); 

$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻"); 

//这是一个二维关联数组 

$smarty->assign("newsArray", $array); 

//编译并显示位于./templates下的index.htm模板 

$smarty->display("example.htm"); 

?>

此间的{section}块的对于变量的命名方式以为稍微别扭,可是没什么,你即使记住模板变量使用:
$loopName[金沙国际唯一官网网址 ,name].var这种情势就能够了,loopName为loop处付与的变量名,[name]为name处付与的字符串,.后为为你要在程序数组中设定要与值相对应的下标名称就能够了。

7:$smarty->cache(“./cache”):

4:$smarty->templates(“”):
这一句指明$smarty对象使用tpl模板时的门径,它是三个索引,在未有这一句时,Smarty暗许的沙盘路线为当前目录的templates目录,实际在写程序时,大家要将这一句写明,那也是一种好的次序风格。

这一句新建二个Smarty对象$smarty,轻巧的二个目的的实例化。

1:/**/语句:
蕴含的一些为顺序篇头注释。首要的剧情应为对前后相继的效果,版权与作者及编辑时间做三个轻便的介绍,那在smarty中不是必得的,但从程序的风格来说,那是叁个好的风骨。

$loopName[name].var这种模式就能够了,loopName为loop处授予的变量名,[name]为name处赋予的字符串,.后为为你要在程序数组中设定要与值绝对应的下标名称就能够了。

3:$smarty = new Smarty():
这一句新建叁个斯Matty对象$smarty,轻松的三个指标的实例化。

{#/foreach#} 

{foreach from=$newsArray item=newsID}

<?php
include_once("./comm/Smarty.class.php"); 

$smarty = new Smarty();            //建立smarty实例对象$smarty

$smarty -> templates("./templates");//设置模板目录
$smarty ->templates_c("./temlpates_c");//设置编译目录

$smarty ->cache("/cache");  //缓存目录
$smarty ->cache_lifetime = 0; //缓存时间
$smarty ->caching =true;   //缓存方式

$smarty ->left_delimiter = "{";
$smarty ->right_delimiter = "}";

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻"); 
$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻"); 
$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻"); 
$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻"); 
$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻"); 
$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻"); 

$smarty ->assign("newsArray","$array");//进行模板变量替换
$samrty ->display("example.tpl");  //编译并显示位于./templates下的index.html模板
?>

这一句指明$smarty对象实行编写翻译时的目录。在模板设计篇我们早已清楚斯玛特y是一种编写翻译型模板语言,而这一个目录,便是它编写翻译模板的目录,要细心,如若站点坐落于linux服务器上,请保管

提及服务端渲染,对于动态服务来说,这几个世界上跑的超多页面都经验过服务端的数据渲染,接口->前端赋值->模板渲染

{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}

附上
Smarty 入门
一、smarty的前后相继设计有些
在smarty的模版设计有些自个儿轻易的把smarty在模板中的一些常用设置做了大致的牵线,这一节器重来介绍一下什么在smarty中起头大家前后相继设计。下载斯Matty文件放到你们站点中。

新闻编号:1 

新闻内容:第1条新闻 

新闻编号:2 

新闻内容:第2条新闻 

新闻编号:3 

新闻内容:第3条新闻 

新闻编号:4 

新闻内容:第4条新闻 

新闻编号:5 

新闻内容:第5条新闻 

新闻编号:6 

新闻内容:第6条新闻

5:$smarty->templates_c(“”):
这一句指明$smarty对象开展编写翻译时的目录。在模板设计篇我们已经明白斯马特y是一种编写翻译型模板语言,而以此目录,便是它编写翻译模板的目录,要小心,借使站点位于linux服务器上,请确认保证
teamplates_c里定义的那些目录具有可写可读权限,暗许意况下它的编写翻译目录是当前目录下的templates_c,出于肖似的理由大家将其明显的写出来。

2:include_once语句:

前后相继文件:example.php如下:

此地将出口二个数组:

模板文件:
example.htm页面如下:

 

{foreach from = $array item = array_id}
{foreachelse}
{/foreach}
<?php 
/** 

* @version $Id: index.php 
* @package 
* @author www.php100.com 
* @action 显示实例程序 
*/ 
include_once("./Smarty/Smarty.class.php"); //包含smarty类文件 

$smarty = new Smarty(); //建立smarty实例对象$smarty 
$smarty->templates("./templates"); //设置模板目录 
$smarty->templates_c("./templates_c"); //设置编译目录 
$smarty->cache("./cache"); //缓存目录 
$smarty->cache_lifetime = 0; //缓存时间 
$smarty->caching = true; //缓存方式 

$smarty->left_delimiter = "{#"; 
$smarty->right_delimiter = "#}"; 
$smarty->assign("name", "zaocha"); //进行模板变量替换 
$smarty->display("index.htm"); //编译并显示位于./templates下的index.htm模板 
?> 

9:$smarty->caching = 1:
那些性情告诉Smarty是不是要举办缓存以致缓存的点子。它能够取3个值,0:斯Matty暗许值,表示不对模板举办缓存;1:表示斯马特y将运用当前定义的cache_lifetime来决定是还是不是终止cache;2:表示
Smarty将采纳在cache被确立刻使用cache_lifetime这些值。习贯上使用true与false来表示是不是开展缓存。

foreach仍是可以够用foreachelse来合营,用foreachelse来代表当传递给foreach的数组为空值时前后相继要实施的操作,具体的应用格局,请参谋手册的证实。

输出结果:

这里有个名词要求验证:

index.php代码如下

里面,from
提议要循环的数组变量,item为要循环的变量名称,循环次数由from所内定的数组变量的个数所主宰。{foreachelse}用来当程序中传送过来的数组为空时的拍卖,上边是四个简约的事例:

①:
foreach:用于循环轻松数组,它是三个选拔性的section循环,它的定义格式为:

这里将以秒为单位实行测算缓存有效的光阴。第叁回缓存时间到期时当斯Matty的caching变量设置为true时缓存将被重新建构。当它的取值为-1时表示创立起的缓存从不误点,为0时期表在前后相继每一趟推行时缓

foreach还足以用foreachelse来合作,用foreachelse来表示当传递给foreach的数组为空值时前后相继要实行的操作,具体的行使方法,请参照他事他说加以调查手册的求证。

相应的将{$name}产生<{$name}>,这样程序才方可正确的找到模板变量。

4:$smarty->templates(“”):

它将设置到网站的smarty文件包涵到当下文件中,注意包括的门路必定要写准确。

那么些性情告诉斯马特y是还是不是要进行缓存以致缓存的不二等秘书诀。它能够取3个值,0:斯Matty暗中同意值,表示不对模板举行缓存;1:表示Smarty将接受当前定义的cache_lifetime来支配是还是不是终止cache;2:表示

 

9: $smarty->caching = 1:

  1. 最后通过一些简单的模板语法把数据显示出来,这一节主要来介绍一下如何在smarty中开始我们程序设计。$smarty->display(“index.tpl”):

 

好了,smarty学习指南—程序设计篇就写到这里,对于通常的利用,这么些知识已经足足了,另外的局地尖端手艺大家请参见手册中的例子,下一节将讲讲斯马特y在实际应用中的例子,将各自以php内置的mysql语句,phplib中的DB类,ADODB,Pear中DB类来分别说一下逐项类库在同三个例子中的实现。

 

example.tpl

 

这里将出口三个数组:

那是五个八花九裂的不出示数据,本文做了修改。

该数的原型为assign(string varname, mixed
var卡塔尔,varname为模板中动用的模板变量,var提出要将模板变量替换的变量名;其第三种原形为assign(mixed
var卡塔尔国,大家要在背后的事例详细的批注这些成员函数的利用办法,assign是斯Matty的着力函数之一,全部对模板变量的轮番都要使用它。

 

5:$smarty->templates_c(“”):

这一句指明$smarty对象使用tpl模板时的门径,它是多少个目录,在并未有这一句时,Smarty暗中同意的沙盘模拟经营路线为当前目录的templates目录,实际在写程序时,大家要将这一句写明,这也是一种好的前后相继风格。

1:
foreach:用于循环轻便数组,它是一个选取性的section循环,它的定义格式为:

 

我们要确认保证它的可读可写性。

三:模板表达

它们的活龙活现性质大家能够参照他事他说加以考查手册,在程序中可灵活应用它的这几个属性,模板部分自身就利用过index属性,我们能够回过头去探视。

teamplates_c里定义的那几个目录具有可写可读权限,默许情形下它的编写翻译目录是当前目录下的templates_c,出于同样的说辞我们将其远近出名的写出来。

 

 

8: $smarty->cache_lifetime = 60 * 60 * 24:

 

 

section的发生是为解决foreach的欠缺的,与foreach相仿,它用来设计模板内的循环块,它比较复杂,可非常的大程序上满足程序需求,所以在前后相继中本人习贯使用它而不利用foreach,基本精气神为:

为”{#”与”#}”或是”<!–{“与”}–>”或别的标识符,注意,若是在这里间定义了左右分割符后,在模板文件中相应的要使每一个变量使用与定义近似的符号,举例在此边钦赐为”<{“与”}>”,htm模板中也要

 

抱歉,数据库中尚无音信输出!

输入结果:example.php

1:/**/语句:

 

 

  1. section:
{section name=loop loop=$News} 
新闻编号:{$News[loop].newsID} 
新闻标题:{$News[loop].newsTitle} 
{sectionelse} 
对不起,没有任何新闻输入! 
{/section}

包括的部分为顺序篇头注释。首要的内容应当为对前后相继的效果,版权与笔者及编辑时间做一个归纳的牵线,那在smarty中不是必备的,但从程序的风格来说,那是二个好的风骨。

10:$smarty->assign(“name”, “zaocha”):

新闻编号:{$newsID}

 

 

巡回下标:实际它的韩文名为index,是索引的乐趣,这里本人将它译成”下标”,首借使为了好通晓。它代表在显示那几个循环块时当前的循环索引,私下认可从0伊始,受$start的震慑,假诺将$start设为5,它也将从5始发计数,在模板设计有个别我们应用过它,那是当前{section}的二个性能,调用形式为斯Matty.section.sectionName.index,这里的sectionName指的是函数原型中的name属性。

此间的{section}块的对于变量的命名情势认为有一点点别扭,不过没什么,你只要记住模板变量使用:

example.php

 

前后相继文件:example.php

 

foreach 输出多个“二维关联数组”的数额:

这里将输出一个数组: 

新闻编号:1 

新闻内容:第1条新闻 

新闻编号:2 

新闻内容:第2条新闻 

新闻编号:3 

新闻内容:第3条新闻 

新闻编号:4 

新闻内容:第4条新闻 

新闻编号:5 

新闻内容:第5条新闻 

新闻编号:6 

新闻内容:第6条新闻

大家把上边的老大例子使用{section}来替代{foreach}来落完结样的机能,注意,在此个事例中小编只将tpl模板中的{foreach}用{section}来完结,php程序文件中平昔不其余变动,同时加了{sectionelse}管理块:

example.php 输出文件

 

一:smarty的程序设计有个别

{/foreach}
{foreachelse}
新闻内容:{$newsTitle}

 

 

 

 

{foreach from=$array item=array_id} 
{foreachelse} 
{/foreach}

 

存总是被再一次确立。上边的安装表示将cache_lifetime设置为一天。

原稿地址:

 

6:$smarty->left_delimiter与$smarty->right_delimiter:

 

 

 

{#foreach item=new from=$news#} 

新闻编号:{#$new.id#} 

新闻内容:{#$new.title#} 

{#foreachelse#}

接下去介绍四个section循环块与foreach循环块,本来它应该归属模板部分,但是出于它们是smarty的精华所在,並且与smarty程序设计某些沟通极度严酷,所以就在本节单独拿出来说一下。

3:$smarty = new Smarty():

 


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图