《Smarty入门教程》word版.doc_第1页
《Smarty入门教程》word版.doc_第2页
《Smarty入门教程》word版.doc_第3页
《Smarty入门教程》word版.doc_第4页
《Smarty入门教程》word版.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

勤思网络Smarty教程修正版,修改了一些网上复制大师兄教程的错误:整个教程分四大部分:一、模板设计部分二、程序设计部分三、实例篇(使用PHP内置MySQL函数)四、实例篇(使用phplib的DB类)教程一:模板设计部分一、什么是smarty? smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。二、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类:安装smarty的环境:php版本4.06以上版本。安装smarty方法非常简单,从/do_download.p.獿ibs中所有文件拷入comm目录,完成基本安装.其它高级安装使用方法请看手册.五、smarty在模板中的使用:本节通过几个实例来讲一讲smarty的使用。smarty模板通常使用.tpl来标识,有些人为了美工方便,将扩展名直接写成.html,也是可以的。本文中采用smarty标准写法:以.tpl来表示为一个smarty模板。 专业的web开发交流论坛实例1:先来看一个简单的例子。index.tpl1. 2. *页面头*3. 大家好,我叫, 欢迎大家经常光顾web开发论坛:4. *页面尾* 5. 上边的这个例子是一个tpl模板,其中:6. 1. 是模板页的注释,它在smarty对模板进行解析时不进行任何输出,仅供模板设计师对模板进行注释。7. 2. 使用此句将一个模板文件包含到当前页面中,例子中将在网站中公用事的head.tpl与foot.tpl进行了包含,你可以这样想,使用这一句将xxx.tpl中的内容全部复制在当前语句处。当然,你不使用这一句也可以,将XXX.tpl中的内容复制到当前语句处也是完全可以了。8. 3.: 模板变量,smarty中的核心组成,采用smarty定义的左边界符与右边界符包含着、以PHP变量形式给出,在smarty程序中将使用9. $smarty-assign(name, 李晓军);将模板中的$name替换成“李晓军”三个字。整个实例源程序如下:header.tpl1.2. 3. 4. 大师兄smarty教程5. 6. foot.tpl1. 2. CopyRight(C) by 大师兄 2004年8月 Email: 3. 4. 5. 复制代码index.tpl1.2. 3. 4. 大家好,我叫, 欢迎大家阅读我的smarty学习材料。5. index.php1. template_dir = ./templates;/设置模板目录16. $smarty-compile_dir = ./templates_c; /设置编译目录17. /左右边界符,默认为,但实际应用当中容易与JavaScript18. /相冲突,所以建议设成或其它。19. $smarty-left_delimiter = right_delimiter = ;21. $smarty-assign(name, 李晓军); /进行模板变量替换22. /编译并显示位于./templates下的index.tpl模板23. $smarty-display(index.tpl);24. ?复制代码最终执行这个程序时将显示为:=执行index.php=大师兄smarty教程大家好,我叫李晓军, 欢迎大家阅读我的smarty学习材料。 CopyRight(C) by 大师兄 2004年8月 Email: 实例2:这个例子是综合使用smarty模板参数的一个例子,这些参数用来控制模板的输出,我只选其中几个,其它的参数你去看参考吧。1. 2. 大师兄smarty示例23. 4. 1. 第一句首字母要大写:5. 2. 第二句模板变量 + 李晓军:6. 3. 第三句输出当前日期:7. 4. 第四句.php程序中不处理,它显示默认值:8. 5. 第五句要让它缩进8个空白字母位,并使用*取替这8个空白字符:9. 6. 第六句把TEACHerLI163.com全部变为小写:10. 7. 第七句把变量中的teacherli替换成:李晓军:11. 8. 第八句为组合使用变量修改器:12. 13. example2 .php1. assign(str1, my name is xiao jun, li.); /将str1替换成My Name Is Xiao Jun, Li.4. $smarty-assign(str2, 我的名字叫:); /输出: 我的名字叫:李晓军5. $smarty-assign(str3, 公元); /输出公元2004年8月21日(我的当前时间)6. /$smarty-assign(str4, ); /第四句不处理时会显示默认值,如果使用前面这一句则替换为7. $smarty-assign(str5, 前边8个*); /第五句输出:*前边8个*8. $smarty-assign(str6, TEACHerLI163.com); /这里将输出email=/email9. $smarty-assign(str7, this is teacherli); /在模板中显示为:this is 李晓军10. $smarty-assign(str8, HERE IS COMBINING:);11.12. /编译并显示位于./templates下的index.tpl模板13. $smarty-display(example2.tpl); 14. ?最终输出效果:=example2.php输出效果:=大师兄smarty示例21. 第一句首字母要大写:My Name Is Xiao Jun, Li.2. 第二句模板变量 + 李晓军:我的名字叫:李晓军3. 第三句输出当前日期:公元2004年8月21日4. 第四句.php程序中不处理,它显示默认值:没有值!5。第五句要让它缩进8个空白字母位,并使用*取替这8个空白字符:*前边8个*6. 第六句把TEACHerLI163.com全部变为小写:7. 第七句把变量中的teacherli替换成:李晓军:this is 李晓军8. 第八句为组合使用变量修改器:Here is Combining:这里是新加的时间:2004年8月21日在模板中的这些参数被称为变量修改器(variable modifiers),使用这些参数可对模板进行一系列的修改控制。变量修改器使用|和调节器名称应用修改器, 使用:分开修改器参数。变量修改器可以组合使用,像第八句一样,实际使用中可以灵活应用。实例3.example3.tpl1. 2. ? 模板中内定的一些函数 3. ? 4. ? 5. ? 6. ? 这里将显示模板内部定义的一个变量:UserName = 7. ?8. ? 下面的这一行将显示3个checkBox: 9. ? html_checkboxes name=CheckBox values=$CheckName checked=$IsChecked output=$value separator= 10. ? 11. 下面在这一行将显示3个radio: 12. ? html_radios name=RadioBox values=$RadioName checked=$IsChecked output=$value separator= 13. ? 14. ? 下面显示一个月,日, 年选择框: 15. ? 16. ? CopyRight(C) By XiaoJun, Li 2004 17. ? 18. ? example3.php1. template_dir=./templates/;6. $smarty-compile_dir=./templates_c/;7. $smarty-config_dir=./configs/;8. $smarty-cache_dir=./cache/;9. $smarty-caching= false;10. $smarty-left_delimiter=right_delimiter=;12. $smarty-compile_check = true;13. $smarty-debugging = true;14. /- 15. /处理html_checkboxes name=CheckBox values=$CheckName checked=$IsChecked output=$value separator=16. /- 17. $smarty-assign(CheckName,array(1001=语文,1002=数学,1003=外语);18. $smarty-assign(IsChecked,1001);19. /- 20. /处理html_radioes name=RadioBox values=$RadioName checked=$IsChecked output=$value separator= 21. /- 22. $smarty-assign(CheckName,array(1001=语文,1002=数学,1003=外语);23. $smarty-assign(IsChecked,1001);24. /- 25. /html_select_date不用处理会自动输出 26. /- 27. $smarty-display(example3.tpl);28. ?复制代码=example3.php输出效果:=模板中内定的一些函数 这里将显示模板内部定义的一个变量:UserName = 大师兄下面的这一行将显示3个checkBox:语文数学外语下面在这一行将显示3个radio:语文数学外语下面显示一个月,日, 年选择框:JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember010203040506070809101112131415161718192021222324252627282930312004CopyRight(C) By XiaoJun, Li 2004李晓军例3使用了一些smarty模板中内置的一些函数,相似的函数大家可以在手册中查到,使用方法很简单,大家可以自己去查找.44例4.模板控制(if / elseif / else/ endif )example4.tpl1.2. 3. 模板中的流程控制4. 5. 6. 7. 色彩:8.9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. example4.php1.2. template_dir = ./templates/;8. $smarty-compile_dir = ./templates_c/;9. $smarty-left_delimiter = right_delimiter = ;11. $smarty-config_dir = ./configs/;12. $smarty-cache_dir = ./cache/;13. $smarty-caching = false;14.15. $array= array(newsID=001, newsTitle=第1条新闻);16. $array= array(newsID=002, newsTitle=第2条新闻);17. $array= array(newsID=003, newsTitle=第3条新闻);18. $array= array(newsID=004, newsTitle=第4条新闻);19. $array= array(newsID=005, newsTitle=第5条新闻);20. $array= array(newsID=006, newsTitle=第6条新闻);21. $array= array(newsID=007, newsTitle=第7条新闻);22. $array= array(newsID=008, newsTitle=第8条新闻);23.24.25. $smarty-assign(News, $array);26. $smarty-display(example4.tpl);27. ?example4.php输出:=模板中的流程控制001第1条新闻002第2条新闻003第3条新闻004第4条新闻005第5条新闻006第6条新闻007第7条新闻008第8条新闻=模板文件中使用:1.2. 3. tr bgcolor=4. 5. 6. tr bgcolor = 7. 8. 复制代码这一语句块进行设置每一行的背景颜色, 还记的吧,是例3中设置模板内部变量的定义方法, 专业的web开发交流论坛使用模板内置的流程控制语句有时可以极大程度上提高程序的控制能力,下面一个例子是中曾经有位朋友问过的,我将它作为实例放在这里供大家学习.例4我用来说明if / elseif /else /if的使用方法,如果单为了实现隔行的目的,大家可以使用这一句就行了:1.2. 3. tr bgcolor=4. 5. 6. 例5: 使用模板内置流程控制语句进行一行多单元格内容输出, 也就是在视觉上smarty每记输出几条记录:example5.tpl1.2. 3. 4. 一行输出多条记录5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 复制代码example5.php1. template_dir = ./templates/;6. $smarty-compile_dir = ./templates_c/;7. $smarty-left_delimiter = right_delimiter = ;9. $smarty-config_dir = ./configs/;10. $smarty-cache_dir = ./cache/;11. $smarty-caching = false;12.13. $array= array(newsID=001, newsTitle=第1条新闻); 14. $array= array(newsID=002, newsTitle=第2条新闻);15. $array= array(newsID=003, newsTitle=第3条新闻);16. $array= array(newsID=004, newsTitle=第4条新闻);17. $array= array(newsID=005, newsTitle=第5条新闻);18. $array= array(newsID=006, newsTitle=第6条新闻);19. $array= array(newsID=007, newsTitle=第7条新闻);20. $array= array(newsID=008, newsTitle=第8条新闻);21.22.23. $smarty-assign(News, $array);24.25. $smarty-display(example5.tpl);26. ?复制代码=example5.php输出内容:=一行输出多条记录 001第1条新闻002第2条新闻003第3条新闻004第4条新闻 005第5条新闻006第6条新闻007第7条新闻008第8条新闻 说明:本来还可以优化,使得第一行不输出一个空行的 ,但是学习程序,简单为好,先就这么用了. 在这里说明一下:1.2. 3. 4. 5. 6. /if7. 8. 9. 复制代码指的是一个循环部分,在下一节会有详细的介绍,我们主要来看看这一句:$smarty.section.loop指出$smarty的实例中的section段有一个叫loop的部分, 它有一个属性叫index, 它的表示当前循环的索引值,从0开始递增,我们把它%4后与0相比较,也就是说,如果当前的索引值是4的倍数,它就输出一个,否则执行下面的部分,很简单的就解决了一个在程序上实现起来很麻烦的事情.这里我仅演示的是如何使用if语句功能,实现这个功能在Smarty的模板中还有一个非常方便的办法:cycle,使用的例子如下所示:1.2. 3. 4. 5. 6. 复制代码教程之二:程序设计部分在smarty的模板设计部分我简单的把smarty在模板中的一些常用设置做了简单的介绍,这一节主要来介绍一下如何在smarty中开始我们程序设计。首先来介绍一下在上一节中我们使用的过的.php文件中的一些元素。同样,我们拿上一节中最开始的那个index.php文件来说明一下:=index.php= *1. */2. include_once(./comm/Smarty.class.php); /包含smarty类文件3.4. $smarty = new Smarty(); /建立smarty实例对象$smarty5. $smarty-template_dir = ./templates;/设置模板目录6. $smarty-compile_dir = ./templates_c; /设置编译目录7.8.9. /*大家注意,这里我是我新加入的*/10.11. $smarty-cache_dir = ./cache; /设置缓存目录12. $smarty-cache_lifetime = 60 * 60 * 24; /设置缓存时间13. $smarty-caching = true; /设置缓存方式14.15. /-16. /左右边界符,默认为,但实际应用当中容易与JavaScript17. /相冲突,所以建议设成或其它。18. /-19. $smarty-left_delimiter = right_delimiter = ;21.22. $smarty-assign(name, 李晓军); /进行模板变量替换23.24. /编译并显示位于./templates下的index.tpl模板25. $smarty-display(index.tpl); 26. ?复制代码我们可以看到,smarty的程序部分实际就是符合php语言规范的一组代码,我们依次来解释一下:1。/*/语句: 包含的部分为程序篇头注释。主要的内容应该为对程序的作用,版权与作者及编写时间做一个简单的介绍,这在smarty中不是必需的,但从程序的风格来讲,这是一个好的风格。2。include_once语句:它将安装到网站的smarty文件包含到当前文件中,注意包含的路径一定要写正确。3。$smarty = new Smarty():这一句新建一个Smarty对象$smarty,简单的一个对象的实例化。/ 更专业的web开发交流论坛4。$smarty-template_dir = : 这一句指明$smarty对象使用tpl模板时的路径,它是一个目录,在没有这一句时,Smarty默认的模板路径为当前目录的templates目录,实际在写程序时,我们要将这一句写明,这也是一种好的程序风格。5。$smarty-compile_dir = :这一句指明$smarty对象进行编译时的目录。在模板设计篇我们已经知道Smarty是一种编译型模板语言,而这个目录,就是它编译模板的目录,这里要注意,如果站点位于*nix服务器上,请确保compile_dir里定义的这个目录具有可写可读权限,默认情况下它的编译目录是当前目录下的templates_c,出于同样的理由我们将其明确的写出来。6。$smarty-left_delimiter与$smarty-right_delimiter:指明在查找模板变量时的左右分割符。默认情况下为与,但在实际中因为我们要在模板中使用,Script中的函数定义难免会使用,虽然它有自己的解决办法,但习惯上我们将它重新定义为或是或其它标志符,注意,如果在这里定义了左右分割符后,在模板文件中相应的要使每一个变量使用与定义相同的符号,例如在这里指定为,tpl模板中也要相应的将$name变成,这样程序才可以正确的找到模板变量。7。$tpl-cache_dir = ./cache;:告诉Smarty输出的模板文件缓存的位置。上一篇我们知道Smarty最大的优点在于它可以缓存,这里就是设置缓存的目录。默认情况下为当前目录下的cache目录,与templates_c目录相当,在*nix系统中我们要确保它的可读可写性。8. $smarty-c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论