仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 978|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之smarty实例教程 ---法式设计局部

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:28:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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有兴趣,那么选择教材也是很重要的。
冷月葬花魂 该用户已被删除
沙发
发表于 2015-2-4 13:10:23 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
第二个灵魂 该用户已被删除
板凳
发表于 2015-2-9 23:05:33 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
精灵巫婆 该用户已被删除
地板
发表于 2015-3-7 06:52:03 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
飘飘悠悠 该用户已被删除
5#
发表于 2015-3-14 13:05:44 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
深爱那片海 该用户已被删除
6#
发表于 2015-3-21 08:03:15 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
若相依 该用户已被删除
7#
发表于 2015-3-21 09:43:57 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-31 01:56:37 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
海妖 该用户已被删除
9#
发表于 2015-4-3 22:09:36 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
蒙在股里 该用户已被删除
10#
发表于 2015-4-7 10:52:43 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
小妖女 该用户已被删除
11#
发表于 2015-4-15 05:59:42 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
山那边是海 该用户已被删除
12#
发表于 2015-4-21 05:24:10 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
13#
发表于 2015-4-23 23:03:08 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
admin 该用户已被删除
14#
发表于 2015-6-4 02:06:00 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
只想知道 该用户已被删除
15#
发表于 2015-6-9 08:21:37 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
若天明 该用户已被删除
16#
发表于 2015-6-21 12:31:50 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
愤怒的大鸟 该用户已被删除
17#
发表于 2015-7-2 06:50:48 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
因胸联盟 该用户已被删除
18#
发表于 2015-7-9 04:55:20 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
柔情似水 该用户已被删除
19#
发表于 2015-7-13 22:06:33 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
莫相离 该用户已被删除
20#
发表于 2015-7-19 05:23:59 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-30 14:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表