电脑安全

您当前的位置:主页 > 电脑安全 >

php smarty 基础-网络编程

来源:[db:来源]标题:   模板    编辑:电脑技术全能网 时间:2019-09-21 12:24

原标题:php smarty 基础-网络编程
   Smarty是一个应用PHP写进去的模板PHP模板引擎,是现在业界最闻名的PHP模板引擎之一。它分别了逻辑代码和内在的内容,供给了一种易于治理和应用的方式,用来将底本与HTML代码混淆在一同PHP代码逻辑分别。简略的讲,目标就是要应用PHP顺序员同美工分别,应用的顺序员转变顺序的逻辑内容不会影响到美工的页面计划,美工从新修正页面不会影响到顺序的顺序逻辑,这在多人配合的名目中显的尤其主要。甚么是PHP模板?该怎样使我的PHP剧本从计划中自力进去?这无疑地是在PHP邮件列表上所发问的最多的成绩之一。固然PHP被标榜为“HTML嵌入式言语”,在写过很多PHP和HTML混杂式的工程以后,我发生了一个分别表单和内容的主意。并且,在很多公司里计划计划者的脚色和顺序计划者是离开的。因而,如许的一个模板处理计划发生了……比方在一个公司,一个利用顺序的开辟流程以下:在提交打算文档以后,界面计划者[美工]制造了网站的表面模子,而后把它交给后盾顺序员。顺序员应用PHP 完成贸易逻辑,同时应用表面模子做成基础架构。而后工程被前往到HTML页面计划者持续完美。就如许工程能够在后盾顺序员和页面计划者之间来往返回好几回。因为后盾顺序员不喜爱干涉任何无关HTML标签,同时也不须要美工们和PHP代码混在一同;美工计划者只要要设置文件,静态区块和其余的界脸部分,不用要去打仗那些错综庞杂的PHP代码。因而,这时间有一个很好的模板支撑就显得很主要了。纵观当今存在的很多PHP模板处理计划(比方PHPLIB),大少数都只是供给了用模板代替变量和将静态区块的功效无限的格局化的基础方式。然而咱们的需要比这个要高的多。咱们完整不想要PHP顺序员去计划HTML 页面,但是这又是弗成幸免的。比方:假如美工想要在静态区块之间瓜代差别的配景色彩,他便可能得和顺序员事后说好。一样,美工们也应当有本人关于页面计划的设置文件,这一样能够经过变量把他们拉到模板里边去。Smarty的出生早在1999年前期,咱们就曾经开端为模板引擎写阐明文档。在实现这个文档以后,咱们开端用C写一个模板引擎,并有盼望被包括到PHP里去。在撞上了很多的技巧困难的同时,“甚么是模板应当做的,甚么不应做”这个成绩,也被热闹的探讨着。从这些教训,咱们决议应当用PHP将模板引擎写成一个类,让任何感到适合的人应用它。以是咱们写了一个引擎,今后就有了Smarty。(注:这个类从前素来没有公然宣布过)。这个类简直到达了咱们全部的请求:惯例变量调换,支撑包含其余模板,应用设置文件集成设置,嵌入PHP代码,限度'if'语句的感化,另有更多的能够多层嵌套的硬朗的静态区块。它用惯例表白式做到这所有,因而代码变得相称使人隐晦。在每次挪用的时间,都要去剖析那些语法和惯例表白式,因而在大型利用的时间,它明显慢了上去。在顺序员的目光看来,最大的成绩仍是应用PHP剧本树立和处置模板和静态区块的全部须要任务。咱们应当怎样使他变得更简略?咱们能够设想Smarty应当有怎么的最初表示。咱们晓得PHP代码假如没有了模板剖析的开支将有多快,咱们也晓得从个别的美工看来PHP言语是如许的“恐惧”,但是这所有能够被一种更简略的模板语法粉饰掉。咱们应当怎么把这两种方式的优点联合起来?因而,Smarty出生了……Smarty长处1. 速率:采纳Smarty编写的顺序能够取得最大速率的进步,这一点是绝对于别的的模板引擎技巧而言的。2. 编译型:采纳Smarty编写的顺序在运转时要编译成一个非模板技巧的PHP文件,这个文件采纳了PHP与HTML混杂的方法,鄙人一次拜访模板时将WEB恳求间接转换到这个文件中,而不再停止模板从新编译(在源顺序没有修改的情形下)3. 缓存技巧:Smarty选用的一种缓存技巧,它能够将用户终极看到的HTML文件缓存成一个动态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB恳求间接转换到这个动态的HTML文件中来,这相称于挪用一个动态的HTML文件。4. 插件技巧:Smarty能够自界说插件。插件现实就是一些自界说的函数。5. 模板中能够应用if/elseif/else/endif。在模板文件应用推断语句能够十分便利的对模板停止格局重排。不合适应用Smarty的处所1. 须要及时更新的内容。比方像股票表现,它须要常常对数据停止更新,招致常常从新编译模板,以是这范例的顺序应用Smarty会使模板处置速率变慢。2. 小名目。小名目由于名目简略而美工与顺序员兼于一人的名目,应用Smarty会在必定水平上损失PHP开辟敏捷的长处。Smarty扼要教程一. 装置 起首翻开网页http://smarty.php.net/download.php,下载最新版本的Smarty。解压下载的文件(名目构造还蛮庞杂的)。接上去演示给各人一个装置实例,看过应当会举一反三的。 (1) 在根名目下树立了新的名目learn/,再在learn/里树立一个名目smarty/。将方才解紧缩进去的名目的libs/拷贝到smarty/里,再在smarty/里新建templates名目,templates里新建cache/,templates/,templates_c/, config/. (2) 新建一个模板文件:index.tpl,将此文件放在learn/smarty/templates/templates名目下,代码以下:Copy code<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type" content="text/html;charset=gb2312"><title>Smarty</title></head><body>{$hello}</body></html> 新建index.php,将此文件放在learn/下:Copy code<?php//援用类文件require 'smarty/libs/Smarty.class.php';$smarty = new Smarty;//设置各个名目的门路,这里是装置的重点$smarty->template_dir ="smarty/templates/templates";$smarty->compile_dir ="smarty/templates/templates_c";$smarty->config_dir = "smarty/templates/config";$smarty->cache_dir ="smarty/templates/cache";//smarty模板有高速缓存的功效,假如这里是true的话即翻开caching,然而会形成网页不马上更新的成绩,固然也能够经过其余的方法处理$smarty->caching = false;$hello = "Hello World!";//赋值$smarty->assign("hello",$hello);//援用模板文件$smarty->display('index.tpl');?>(3) 履行index.php就能看到Hello World!了。二. 赋值在模板文件中须要调换的值用大括号{}括起来,值的后面还要加$号。比方{$hello}。这里能够是数组,比方{$hello.item1},{$hello.item2}… 而PHP源文件中只要要一个简略的函数assign(var , value)。 简略的例子: *.tpl: Hello,{$exp.name}!Good {$exp.time} *.php: $hello[name]= “Mr. Green”; $hello[time]=”morning”; $smarty->assign(“exp”,$hello); output: Hello,Mr.Green!Good morning三. 援用 网站中的网页个别header和footer是能够共用的,以是只有在每个tpl中援用它们便可以了。 示例:*.tpl: {include file="header.tpl"} {* body of template goes here *} {include file="footer.tpl"}四. 推断模板文件中能够应用if else等推断语句,便可以将一些逻辑顺序放在模板里。"eq","ne", "neq", "gt", "lt","lte", "le", "gte" "ge","is even", "is odd", "is not even", "is notodd", "not", "mod", "div by", "evenby", "odd by","==","!=",">","<","<=",">="这些是if中能够用到的比拟。看看就能晓得甚么意义吧。 示例: {if $name eq"Fred"} WelcomeSir. {elseif $name eq"Wilma"} WelcomeMa'am. Welcome,whatever you are. {/if}五. 轮回在Smarty里应用轮回遍历数组的方式是section,怎样赋值遍历都是在模板中处理,php源文件中只有一个assign就能处理成绩。 示例:{* this examplewill print out all the values of the $custid array *}{sectionname=customer loop=$custid}id: {$custid[customer]}<br>{/section}OUTPUT:id: 1000<br>id: 1001<br>id: 1002<br>六. 罕见成绩 Smarty将全部大括号{}里的货色都视为本人的逻辑顺序,因而咱们在网页中想拔出javascript函数就须要literal的帮助了,literal的功效就是疏忽大括号{}。 示例:Copy code <scriptlanguage=javascript> function isblank(field) { if (field.value == '') { return false; } else { document.loginform.submit(); return true; } } </script>{/literal}