|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实现固定数量的几张图片的上传;再如调试软件ZendStudio的使用,看了很多次老师的应用,但总感觉用的不顺手,不懂那么多的数据值,到底哪一个才是真正的问题所在;还有如数据库语句的封装,我只会用简单的函数来进行封装。法式|教程|设计 smarty的法式设计局部:
在smarty的模板设计局部我复杂的把smarty在模板中的一些经常使用设置做了复杂的引见,这一节次要来引见一下若何在smarty中入手下手咱们程
序设计。
PHP代码:--------------------------------------------------------------------------------
起首来引见一下在上一节中咱们利用的过的.php文件中的一些元素。一样,咱们拿上一节中最入手下手的谁人index.php文件来讲明一下:
================================================
index.php
================================================
<?php
/*********************************************
*
* 文件名: index.php
* 作 用: 显示实例法式
*
* 作 者: 巨匠兄
* Email: teacherli@163.com
*
*********************************************/
include_once("./comm/Smarty.class.php"); //包括smarty类文件
$smarty = new Smarty(); //创立smarty实例对象$smarty
$smarty->templates("./templates"); //设置模板目次
$smarty->templates_c("./templates_c"); //设置编译目次
//****人人注重,这里我是我新到场的****//
$smarty->cache("./cache"); //设置缓存目次
$smarty->cache_lifetime = 60 * 60 * 24; //设置缓存工夫
$smarty->caching = true; //设置缓存体例
//----------------------------------------------------
//摆布界限符,默许为{},但实践使用傍边轻易与JavaScript
//相抵触,所以建议设成<{}>或其它。
//----------------------------------------------------
$smarty->left_delimiter = "<{";
$smarty->right_delimiter = "}>";
$smarty->assign("name", "李晓军"); //停止模板变量交换
//编译并显示位于./templates下的index.tpl模板
$smarty->display("index.tpl");
?>
咱们可以看到,smarty的法式局部实践就是合适php言语标准的一组代码,咱们顺次来注释一下:
1。/**/语句:
包括的局部为法式篇头正文。次要的内容应当为对法式的感化,版权与作者及编写工夫做一个复杂的引见,这在smarty中不是必
需的,但从法式的作风来说,这是一个好的作风。
2。include_once语句:
它将装置到网站的smarty文件包括到以后文件中,注重包括的途径必定要写准确。
3。$smarty = new Smarty():
这一句新建一个Smarty对象$smarty,复杂的一个对象的实例化。
4。$smarty->templates(""):
这一句指明$smarty对象利用tpl模板时的途径,它是一个目次,在没有这一句时,Smarty默许的模板途径为以后目次的templates
目次,实践在写法式时,咱们要将这一句写明,这也是一种好的法式作风。
5。$smarty->templates_c(""):
这一句指明$smarty对象停止编译时的目次。在模板设计篇咱们已晓得Smarty是一种编译型模板言语,而这个目次,就是它编译
模板的目次,这里要注重,假如站点位于*nix办事器上,请确保teamplates_c里界说的这个目次具有可写可读权限,默许情形下它的编译目次
是以后目次下的templates_c,出于一样的来由咱们将其明白的写出来。
6。$smarty->left_delimiter与$smarty->right_delimiter:
指明在查找模板变量时的摆布朋分符。默许情形下为"{"与"}",但在实践中由于咱们要在模板中利用<script>,Script中的函数定
义不免会利用{},固然它有本人的处理举措,但习气上咱们将它从头界说为"<{"与"}>"或是"<!--{"与"}-->"或其它标记符,注重,假如在这里
界说了摆布朋分符后,在模板文件中响应的要使每个变量利用与界说不异的符号,例如在这里指定为"<{"与"}>",tpl模板中也要响应的将
{$name}酿成<{$name}>,如许法式才可以准确的找到模板变量。
7。$smarty->cache("./cache"):
告知Smarty输入的模板文件缓存的地位。上一篇咱们晓得Smarty最大的长处在于它可以缓存,这里就是设置缓存的目次。默许情
况下为以后目次下的cache目次,与templates_c目次相当,在*nix体系中咱们要确保它的可读可写性。
8. $smarty->cache_lifetime = 60 * 60 * 24:
这里将以秒为单元停止盘算缓存无效的工夫。第一次缓存工夫到期时当Smarty的caching变量设置为true时缓存将被重建。当它的
取值为-1时暗示创立起的缓存从不外期,为0时暗示在法式每次履行时缓存老是被从头创立。下面的设置暗示将cache_lifetime设置为一天。
9. $smarty->caching = 1:
这个属性告知Smarty是不是要停止缓存和缓存的体例。它可以取3个值,0:Smarty默许值,暗示不合错误模板停止缓存;1:暗示
Smarty将利用以后界说的cache_lifetime来决意是不是停止cache;2:暗示Smarty将利用在cache被创立时利用cache_lifetime这个值。习气上使
用true与false来暗示是不是停止缓存。
10. $smarty->assign("name", "李晓军"):
该数的原型为assign(string varname, mixed var),varname为模板中利用的模板变量,var指出要将模板变量交换的变量名;其
第二种本相为assign(mixed var),咱们要在前面的例子具体的解说这个成员函数的利用办法,assign是Smarty的中心函数之一,一切对模板变
量的交换都要利用它。
11. $smarty->display("index.tpl"):
该函数本相为display(string varname),感化为显示一个模板。复杂的讲,它将剖析处置过的模板显示出来,这里的模板文件不
用加途径,只需利用一个文件名就能够了,它途径咱们已在$smarty->templates(string path)中界说过了。
法式履行完后咱们可以翻开以后目次下的templates_c与cache目次,就会发明鄙人边多出一些%%的目次,这些目次就是Smarty的编译与
缓存目次,它由法式主动生成,不要直接对这些生成的文件停止修正。
以上我复杂的把Smarty法式中的一些经常使用的根基元素引见了一下,在后边的例子中你可以看到将它们将被屡次的利用。
接上去引见一个section轮回块与foreach轮回块,原本它应当属于模板局部,然而因为它们是smarty的精髓地点,并且与smarty法式设计
局部接洽十分严密,所以就在本节独自拿出来说一下。
1. foreach:用于轮回复杂数组,它是一个选择性的section轮回,它的界说格局为:
{foreach from=$array item=array_id}
{foreachelse}
{/foreach}
个中,from 指出要轮回的数组变量,item为要轮回的变量称号,轮回次数由from所指定的数组变量的个数所决意。{foreachelse}用来当
法式中传递过去的数组为空时的处置,上面是一个复杂的例子:
===========================================
example6.tpl
===========================================
<html>
<head><title>这是一个foreach利用的例子</title></head>
<body>
这里将输入一个数组:<br>
{foreach from=$newsArray item=newsID}
旧事编号:{$newsID}<br>
旧事内容:{$newsTitle}<br><hr>
{foreachelse}
对不起,数据库中没有旧事输入!
{/foreach}
</body>
</html>
==========================================
example6.php
==========================================
<?php
/*********************************************
*
* 文件名: example6.php
* 作 用: 显示实例法式2
*
* 作 者: 巨匠兄
* Email: teacherli@163.com
*
*********************************************/
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("example6.tpl");
?>
=================================================
example6.php 输入文件
=================================================
<html>
<head><title>foreach利用的例子</title></head>
<body>
这里将输入一个数组:<br>
旧事编号:1<br>
旧事内容:第1条旧事<br><hr>
旧事编号:2<br>
旧事内容:第2条旧事<br><hr>
旧事编号:3<br>
旧事内容:第3条旧事<br><hr>
旧事编号:4<br>
旧事内容:第4条旧事<br><hr>
旧事编号:5<br>
旧事内容:第5条旧事<br><hr>
旧事编号:6<br>
旧事内容:第6条旧事<br><hr>
</body>
</html>
foreach还可以用foreachelse来婚配,用foreachelse来暗示当传递给foreach的数组为空值时法式要履行的操作,详细的利用办法,请参考
手册的申明。
2. section:
section的发生是为处理foreach的缺乏的,与foreach一样,它用于设计模板内的轮回块,它较为庞杂,可极大法式上知足法式需求,所
以在法式中我习气利用它而不利用foreach,根基本相为:
{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}
name: section的称号,不必加$
$loop: 要轮回的变量,在法式中要利用assign对这个变量停止操作。
$start: 入手下手轮回的下标,轮回下标默许由0入手下手
$step: 每次轮回时下标的增数
$max: 最大轮回下标
$show: boolean类型,决意是不是对这个块停止显示,默许为true
这里有个名词需求申明:
轮回下标:实践它的英文称号为index,是索引的意思,这里我将它译成"下标",次要是为了好了解。它暗示在显示这个轮回块时当
前的轮回索引,默许从0入手下手,受$start的影响,假如将$start设为5,它也将从5入手下手计数,在模板设计局部咱们利用过它,这是以后
{section}的一个属性,挪用体例为Smarty.section.sectionName.index,这里的sectionName指的是函数原型中的name属性。
{section}块具有的属性值,分离为:
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是不是显示
它们的详细属性人人可以参考手册,在法式中可天真利用它的这些属性,模板局部我就利用过index属性,人人可以回过火去看看。
一样,{section}也能够共同利用{sectionelse},用来暗示传入的数组变量为空时对模板停止的处置。
咱们把上边的谁人例子利用{section}来替换{foreach}来完成现样的功效,注重,在这个例子中我只将tpl模板中的{foreach}用
{section}来完成,php法式文件中没有任何修改,同时加了{sectionelse}处置块:
===========================================
example7.tpl
===========================================
<html>
<head><title>这是一个foreach利用的例子</title></head>
<body>
这里将输入一个数组:<br>
{section name=loop, loop=$News}
旧事编号:{$News[loop].newsID}<br>
旧事题目:{$News[loop].newsTitle}<br><hr>
{sectionelse}
对不起,没有任何旧事输出!
{/section}
</body>
</html>
==========================================
example6.php
==========================================
<?php
/*********************************************
*
* 文件名: example7.php
* 作 用: 显示实例法式2
*
* 作 者: 巨匠兄
* Email: teacherli@163.com
*
*********************************************/
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("example6.tpl");
?>
=================================================
example7.php 输入文件
=================================================
<html>
<head><title>foreach利用的例子</title></head>
<body>
这里将输入一个数组:<br>
旧事编号:1<br>
旧事内容:第1条旧事<br><hr>
旧事编号:2<br>
旧事内容:第2条旧事<br><hr>
旧事编号:3<br>
旧事内容:第3条旧事<br><hr>
旧事编号:4<br>
旧事内容:第4条旧事<br><hr>
旧事编号:5<br>
旧事内容:第5条旧事<br><hr>
旧事编号:6<br>
旧事内容:第6条旧事<br><hr>
</body>
</html>
这里的{section}块的关于变量的定名体例感到有些别扭,不外不妨,你只需记住模板变量利用:
$loopName[name].var这类形式就好了,loopName为loop处付与的变量名,[name]为name处付与的字符串,.后为为你要在法式数组中设定要
与值绝对应的下标称号就好了。
好了,smarty进修指南---法式设计篇就写到这里,关于普通的使用,这些常识已够用了,其它的一些初级技能人人请参看手册中的例子
,下一节将讲讲Smarty在实践使用中的例子,将分离以php内置的mysql语句,phplib中的DB类,ADODB,Pear中DB类来分离讲一下各个类库在统一个例子中的完成。
你的确对PHP有兴趣,那么选择教材也是很重要的。 |
|