1、大师兄 Smarty 教程(修正版 )大师兄 Smarty 教程修正版,修改了一些网上复制大师兄教程的错误:整个教程分四大部分:一、模板设计部分二、程序设计部分三、实例篇(使用 PHP 内置 MySQL 函数)四、实例篇(使用 phplib 的 DB 类)教程一:模板设计部分一、什么是 smarty?smarty 是一个使用 PHP 写出来的模板 PHP 模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用 PHP 程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。二、smarty
2、优点:1. 速度:采用 smarty 编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。2. 编译型:采用 smarty 编写的程序在运行时要编译成一个非模板技术的 PHP 文件,这个文件采用了 PHP 与 HTML 混合的方式,在下一次访问模板时将 WEB 请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下) 3. 缓存技术:smarty 选用的一种缓存技术,它可以将用户最终看到的 HTML 文件缓存成一个静态的 HTML 页,当设定 smarty 的 cache 属性为 true 时,在 smarty 设定的 cachetime期内将用户的
3、WEB 请求直接转换到这个静态的 HTML 文件中来,这相当于调用一个静态的 HTML 文件。4. 插件技术:smarty 可以自定义插件。插件实际就是一些自定义的函数。5. 模板中可以使用 if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。三、不适合使用 smarty 的地方:1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用 smarty 会使模板处理速度变慢。2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用 smarty 会丧失 php开发迅速的优点。四、安装 smarty 类:安装 sm
4、arty 的环境:php 版本 4.06 以上版本。安装 smarty 方法非常简单,从 http:/ ibs 中所有文件拷入 comm 目录 ,完成基本安装.其它高级安装使用方法请看手册.五、smarty 在模板中的使用:本节通过几个实例来讲一讲 smarty 的使用。smarty 模板通常使用.tpl 来标识,有些人为了美工方便,将扩展名直接写成.html,也是可以的。本文中采用 smarty 标准写法: 以.tpl 来表示为一个 smarty 模板。实例 1:先来看一个简单的例子。index.tplCODE:Copy to clipboard* 显示是 smarty 变量识符里的用 *包
5、含的文字为注释内容 *页面头*大家好,我叫, 欢迎大家阅读我的 smarty 学习材料。*页面尾 * 上边的这个例子是一个 tpl 模板,其中:1. 是模板页的注释,它在 smarty 对模板进行解析时不进行任何输出,仅供模板设计师对模板进行注释。2. 使用此句将一个模板文件包含到当前页面中,例子中将在网站中公用事的 head.tpl 与 foot.tpl 进行了包含,你可以这样想,使用这一句将 xxx.tpl 中的内容全部复制在当前语句处。当然,你不使用这一句也可以,将 XXX.tpl 中的内容复制到当前语句处也是完全可以了。3.$name: 模板变量, smarty 中的核心组成,采用 s
6、marty 定义的左边界符与右边界符 包含着、以 PHP 变量形式给出,在 smarty 程序中将使用$smarty-assign(“name“, “李晓军 “);将模板中的$name 替换成“李晓军”三个字。整个实例源程序如下:header.tplCODE:Copy to clipboard大师兄 smarty 教程foot.tplCODE:Copy to clipboardCopyRight(C) by 大师兄 2004 年 8 月 Email: index.tplCODE:Copy to clipboard* 显示是 smarty 变量识符里的用 *包含的文字为注释内容 *includ
7、e file=“header.tpl“*页面头 *大家好,我叫$name, 欢迎大家阅读我的 smarty 学习材料。include file=“foot.tpl“*页面尾* index.phpCODE:Copy to clipboardtemplate_dir = “./templates“;/设置模板目录$smarty-compile_dir = “./templates_c“; /设置编译目录/-/左右边界符,默认为,但实际应用当中容易与 JavaScript/相冲突,所以建议设成或其它。/-$smarty-left_delimiter = “right_delimiter = “;$s
8、marty-assign(“name“, “李晓军 “); /进行模板变量替换/编译并显示位于./templates 下的 index.tpl 模板$smarty-display(“index.tpl“); ?最终执行这个程序时将显示为:=执行 index.php=大师兄 smarty 教程大家好,我叫李晓军, 欢迎大家阅读我的 smarty 学习材料。CopyRight(C) by 大师兄 2004 年 8 月 Email: 实例 2:这个例子是综合使用 smarty 模板参数的一个例子,这些参数用来控制模板的输出,我只选其中几个,其它的参数你去看参考吧。example2.tplCODE:
9、Copy to clipboard大师兄 smarty 示例 21. 第一句首字母要大写:$str1|capitalize2. 第二句模板变量 + 李晓军:$str2|cat:“李晓军“3. 第三句输出当前日期:$str3|date_format:“%Y 年%m 月%d 日“4. 第四句.php 程序中不处理,它显示默认值:$str4|default:“没有值!“5. 第五句要让它缩进 8 个空白字母位,并使用“*“取替这 8 个空白字符:$str5|indent:8:“*“6. 第六句把 TEACHerLI 全部变为小写:$str6|lower7. 第七句把变量中的 teacherli 替换
10、成:李晓军:$str7|replace:“teacherli“:“ 李晓军“8. 第八句为组合使用变量修改器:$str8|capitalize|cat:“这里是新加的时间:“|date_format:“%Y年%m 月%d 日 “|lowerexample2 .phpCODE:Copy to clipboardtemplate_dir = “./templates“;/设置模板目录$smarty-compile_dir = “./templates_c“; /设置编译目录/-/左右边界符,默认为,但实际应用当中容易与 JavaScript/相冲突,所以建议设成或其它。/-$smarty-left
11、_delimiter = “; $smarty-right_delimiter = “;$smarty-assign(“str1“, “my name is xiao jun, li.“); /将 str1 替换成 My Name Is Xiao Jun, Li.$smarty-assign(“str2“, “我的名字叫:“); /输出: 我的名字叫:李晓军$smarty-assign(“str3“, “公元“); /输出公元 2004 年 8 月 21 日(我的当前时间)/$smarty-assign(“str4“, “); /第四句不处理时会显示默认值,如果使用前面这一句则替换为“$sma
12、rty-assign(“str5“, “前边 8 个*“); /第五句输出:*前边 8 个*$smarty-assign(“str6“, “TEACHerLI“); /这里将输出 $smarty-assign(“str7“, “this is teacherli“); /在模板中显示为:this is 李晓军$smarty-assign(“str8“, “HERE IS COMBINING:“);/编译并显示位于./templates 下的 index.tpl 模板$smarty-display(“example2.tpl“); ?最终输出效果:=example2.php 输出效果:=大师兄
13、smarty 示例 21. 第一句首字母要大写:My Name Is Xiao Jun, Li.2. 第二句模板变量 + 李晓军:我的名字叫:李晓军3. 第三句输出当前日期:公元 2004 年 8 月 21 日4. 第四句.php 程序中不处理,它显示默认值:没有值!5。第五句要让它缩进 8 个空白字母位,并使用“*“取替这 8 个空白字符:*前边 8 个*6. 第六句把 TEACHerLI 全部变为小写:7. 第七句把变量中的 teacherli 替换成:李晓军:this is 李晓军8. 第八句为组合使用变量修改器:Here is Combining:这里是新加的时间:2004 年 8 月
14、 21日2006-10-15 09:35 PM #1 chaizx (chaizx) 注册会员初级会员UID 24298精华 0积分 159帖子 126金钱 159 喜悦币威望 0 人脉 0 阅读权限 20注册 2003-11-1状态 离线 推荐阅读 有没有介绍 PHP 新函数的中文地方 ?-在模板中的这些参数被称为变量修改器(variable modifiers) ,使用这些参数可对模板进行一系列的修改控制。变量修改器使用“|“和调节器名称应用修改器, 使用“:“分开修改器参数。变量修改器可以组合使用,像第八句一样,实际使用中可以灵活应用。实例 3.example3.tplCODE:Copy
15、 to clipboard模板中内定的一些函数*下面的这一段相当于在模板内部定义一个变量 UserName*assign var=“UserName“ value=“大师兄“ 这里将显示模板内部定义的一个变量:UserName = $UserName下面的这一行将显示 3 个 checkBox:html_checkboxes name=“CheckBox“ values=$CheckName checked=$IsChecked output=$value separator=“下面在这一行将显示 3 个 radio:html_radios name=“RadioBox“ values=$Ra
16、dioName checked=$IsChecked output=$value separator=“下面显示一个月,日, 年选择框:html_select_dateCopyRight(C) By XiaoJun, Li 2004mailto address=“teacherli163.ccom“ text=“联系作者“example3.phpCODE:Copy to clipboardtemplate_dir = ./templates/;$smarty-compile_dir = ./templates_c/;$smarty-config_dir = ./configs/;$smarty
17、-cache_dir = ./cache/;$smarty-caching = false;/-/处理html_checkboxes name=“CheckBox“ values=$CheckName checked=$IsChecked output=$value separator=“/-$smarty-assign(CheckName, array(1001 = 语文,1002 = 数学,1003 = 外语);$smarty-assign(IsChecked, 1001);/-/处理html_radios name=“RadioBox“ values=$RadioName checked
18、=$IsChecked output=$value separator=“/-$smarty-assign(RadioName, array(1001 = 语文,1002 = 数学,1003 = 外语);$smarty-assign(IsChecked, 1001);/-/html_select_date不用处理会自动输出/-$smarty-display(“example3.tpl“);?=example3.php 输出效果:=模板中内定的一些函数assign var=“UserName“ value=“大师兄“ 这里将显示模板内部定义的一个变量:UserName = 大师兄下面的这一行将显
19、示 3 个 checkBox:语文数学外语下面在这一行将显示 3 个 radio:语文数学外语下面显示一个月,日, 年选择框:JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember010203040506070809101112131415161718192021222324252627282930312004CopyRight(C) By XiaoJun, Li 2004李晓军例 3 使用了一些 smarty 模板中内置的一些函数,相似的函数大家可以在手册中查到,使用方法很简单,大家可以自己去查找.例 4.模板控制(if / elseif / else/ endif )example4.tplCODE:Copy to clipboard模板中的流程控制assign var=“tbColor“ value=“green“色彩:$tbColorsection name=loop loop=$News