首页 > 学院 > 开发设计 > 正文

smarty 详细使用教程

2019-11-10 17:18:26
字体:
来源:转载
供稿:网友

MVC是一种开发模式,强调数据的输入、处理、显示是强制分离的

Smarty使用教程1.如何配置我们的smarty解压后把libs文件夹放在网站第一级目录下,然后创建两个文件夹templates 存放模板文件templates_c 存放编译后的文件再创建初始化文件smarty.ini.php

注意事项:1.替换变量的标识分隔符一般使用<{}>改动分隔符的两个方法:1.改源码:Smarty.class.php $left_delimiter 不推荐2.动态修改:$Smarty->left_delimiter="<{";$Smarty->right_delimiter="}>";写在display之前

2.smarty分配数据$smarty->assign("Address",$address);用来赋值到模板中。可以指定一对 名称/数值,也可以指定包含 名称/数值 的联合数组。$smarty->assign("aa",true); //输出1 $smarty->assign("aa",false); //输出空注意:二维关联数组的分配 <{$arr.num.email}>对象的分配 <{$dog1->name}>对象的对象的属性 公开的 <{$dog1->master->name}>从配置文件中取出数据 常见配置样式等先加载配置文件<{config_load file="../configs/foo.conf"}>配置文件中的数据可直接在模板文件中使用<{#Bgcolor#}>

3.smarty模板的内建函数foreach一维数组循环取出<{foreach form=$arr item=temp key=k}><{$k}>=<{$temp}><{/foreach}>二维索引数组循环取出<{foreach form=$arr item=temp key=k}><{foreach form=$temp item=val}><{$val}><{/foreach}><{/foreach}>二维关联数组循环取出<{foreach form=$arr item=item1}><{foreach form=$item1 item=item2 key=k}><{$k}>=<{$item2}><{/foreach}><{/foreach}>

4.自定义函数function test($args){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$args['con']."</font>";}return $str;}//需注册函数$smarty->register_function("self","test");调用形式<{self times="4" size="5" con="hello" color="red"}>

自定义函数(块注册方式)function test2($args,$con){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$con."</font>";}return $str;}//注册块函数$smarty->register_block("block","test2");调用形式<{block times="4" size="5" color="red"}>hello<{/block}>

以插件的形式增加自定义函数(放在libs/plugins文件夹中)必须遵守文件名格式:function.自定义函数名.php函数名格式:function smarty_function_自定义函数名($params,&$smarty){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$args['con']."</font>";}return $str;}//无需注册

以插件的形式增加自定义块函数必须遵守文件名格式:function.自定义函数块名.php函数名格式:function smarty_block_自定义函数块名($params,$con,&$smarty){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$con."</font>";}return $str;}//无需注册

5.smarty基本语法在模板中使用注释<{*注释内容*}>在模板文件中调用函数<{函数名 属性1="属性值" 属性2="属性值"……}>在模板文件对引用的变量可以进行数学运算,但不能用()来改变运算次序分配常量并取出define("RATE","0.08");<{$samrty.conts.RATE}>在模板中使用变量调节器基本用法<{变量/函数/字符串|变量调节器名称:参数1:参数2}>变量调节器可以自定义,以插件的形式给出文件名:modifier.变量名称.phpfunction smarty_modifier_XXX(){//代码}//新建一个变量调节器 要求句子首字母大写其他小写文件名:modifier.变量名称.phpfunction smarty_modifier_mycapitalize(){return strtoupper(substr($string,0,1)).strtolower(substr($string,1));}常用的变量操作符date_formate 时间格式escape 转码nl2br 换行符替换为<br/>regex_replace 正则替换string_formate 字符串格式化truncate 截取

6.samrty其他内建函数capture 捕获config_load 从配置文件中加载变量include 在当前模板中包含其他模板insert 类似于include,但所包含的内容不会被缓存if elseif elseldelim rdelim 左右边界符count 计数literal 标签内数据当文本处理phpsection sectionelse

7.自定义函数counter 保存了每次记数时的当前记数值. 用户可以通过调节 interval 和 direction 调节该值. 也可以决定是否输出该值. 如果需要同时运行多个计数器,必须为它们指定不同的名称. 如果没有指定名称,模板引擎使用 "default" 作为缺省值.cycle用于轮转使用一组值. 该特性使得在表格中交替输出颜色或轮转使用数组中的值变得很容易.html_checkboxes根据给定的数据创建复选按钮组. 该函数可以指定哪些元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代. 所有的输出与 XHTML 兼容.html_options根据给定的数据创建选项组. 该函数可以指定哪些元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代.html_radios根据给定的数据创建单选按钮组. 该函数可以指定哪个元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代. 所有的输出与 XHTML 兼容.html_select_date用于创建日期下拉菜单,可以显示任意年月日.html_select_time用于创建时间下拉菜单mailto用于创建日期下拉菜单popup-init,popuppopup 用于创建javascript弹出窗口. 需要映入overLib.jstextformat用于格式化文本

8.变量(重点使用)$config_dir $template_dir$compile_dir$plugins_dir$caching$cache_dir$cache_lifetime$debugging启动调试控制台

9.smarty的缓存机制默认是当模板文件有改动时,控制器会判断1.模板编译文件是否存在2.模板文件改动时间是否大于编译文件改动时间结果为true时才会重新生成编译文件,从而对页面重新渲染缺点:1.生成的编译文件是PHP动态数据文件,影响浏览器读取性能2.当控制器文件发生变化时,编译文件不会重新生成修改后:1.生成的编译文件是HTML静态数据文件,利于浏览器读取2.当控制器文件发生变化时,通过设置的cache_lifetime来控制重新生成编译文件

局部缓存技术一个模板文件一部分缓存,一部分实时更新insert函数默认是不缓存

//根据ID号来生成不同的缓存页面$smarty->display('模板文件',缓存ID)$smarty->clear_all_cache(int expire time);//清除所有缓存作为可选参数“expire time”,你可以指定一个以秒为单位的最小时间,超过这个时间的缓存都将被清除掉$smarty->clear_cache('模板文件',缓存ID);//清除指定id的缓存文件

append 以值传递,有拷贝的过程append_by_ref 引用添加assign默认是值传递的assign_by_ref是引用传递

10.smarty过滤器PRefilters预过滤器在控制器读取模板文件之前运行,函数封装在display函数中所用是删除不需要的内容,监视对模板进行的操作Postfilters后过滤器 可以用开添加注释版本号在控制器输出编译文件之前运行Outputfilters输出滤镜编译文件被浏览器读取之前执行


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表