一、Smarty基础用法: 1、基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化smarty $smarty->template_dir = './dir';//设置默认模板路径(当前如果有模版,优先找当前目录,没有再找定义的目录) $smarty->left_delimiter = '<{'; //设置边界符 $smarty->right_delimiter = '}>';//设置边界符 $smarty->caching = true;//开启缓存 $smarty->cache_lifetime = 120; //缓存生命周期(秒) $t = '北京真TM好'; //注:assign 可以传递所有数据类型(资源除外) //然后在模板中单一型变量可以直接{$t} //数组{$t['name']}或{$t.name} //对象{$t->name}或其方法{$t->test()} $smarty->assign('t',$t);//传参到模板 $smarty->display('2.html');//渲染(展示模板) 2、smarty中的系统变量 其中一些如下: $smarty.now ,被解析成 time(); $smarty.get.key ---> $_GET[key] $smarty.const.常量---> echo 常量名 3、从配置文件得到的变量 例:x x x .conf 配置项1=值1 配置项2=值2 配置文件的载入 {Config_load file="x x x .conf"} 引用配置选项的值 建议用后者,即中括号语法,兼容性更强 {$smarty.config.配置项}或者{#配置项#} xxx.conf //不用管后缀,就当是配置文件 aa=123 bb=456 <body> <{Config_load file="xxx.conf"}> <h1><{$smarty.config.aaa}></h1> </body> 总结: 模板中的变量有 模板中的变量有 3种来源 种来源 1: assign赋值得到的变量 , 存储在_tpl_vars属性中 2: $smarty系统变量, 对于cookie,session,get,post,$_SERVER等信息,存储在_smarty属性中 Smarty会自动捕捉,并保存起来,形成系统变量,可以直接用标签来引用. 3: 从配置文件读取的变量 , 存储在_config属性中; 定界符冲突的问题 定界符冲突的问题 如果smarty用定界符,比如 {,}, 此定界在js,css里都有很可能碰到,如果碰到,会当成smarty标签来解析,进而引发错误发生. 1: 换定界符,如 {> <} 2: 用literal标签,"原义","字符意义的","无夸张的" 例: {literal}h1{background:gray}{/literal} ---> 一般不用 二、判断、循环、运算 判断 判断 {if $ss === xxx} xxxx {else if $xx ===xx} xxxxx {else} xxxx {/if} 循环 循环 //4.html {foreach $new as $k=>$v} {$v.title} {$v.id} {/foreach} 模板中的运算符 模板中的运算符 //4.html {foreach $new as $k=>$v} {$v.title} {$v.id *4} {/foreach} 变量调节器 变量调节器 date_format [格式化日期] default [默认值] escape [编码] indent [缩进] low er [小写] nl2br [换行符替换成 <r />] replace [替换] strip [去除(多余空格)] strip_tags [去除html标签] upper [大写] display 和fetch的区别 的区别 display 调用的ftech方法 即: display() = echo fetch(); 包含子模板 包含子模板 头部尾部的文件引用等,很实用; {include file='./xxx.html' } 缓存 缓存 开启缓存 //6.php $sm->caching = true;//开启缓存 $sm->cache_lifetime = 120; //缓存生命周期(秒) $smarty->isCached() 判断是否有缓存,如果有缓存,则用缓存,避免数据交互操作 默认情况下:smarty会自动生成一个文件夹templates_c来存放被替换的模板文件 如果开启了缓存,smarty会生成一个cache文件夹来存放被缓存的文件 单模板多缓存 单模板多缓存 1个模板还可以根据其他参数,缓存多个结果,比如商品页面根据商品id来为每个商品缓存一个页面 如下,$id就代表不同的商品id,然后每个id会生成一个缓存文件 if(!$sm->isCached('7.html',$id)){ $sm->assign('a',$id); } $sm->display('7.html',$id); 局部缓存 局部缓存 不缓存标签 可以以不缓存的方式assign()变量。 适用于单个标签不缓存。 例: $foo = 'ttttt'; $smarty->assign('foo',$foo,true); //第三个参数 true 不缓存 那么在模板中 这个<a>{$foo}</a> 会变成<a><?php echo $foo?></a> 而不是<a>ttttt</a> nocache 标签 在模板中,不需要缓存的地方,用 {nocached}{/nocached} 包住. 适用于大段的不缓存效果 html模板 例: {nocache}{$smarty.now }{/nocache} 模板调用 模板调用 PHP函数 函数 模板中用{insert name=xx } 直接调用PHP中的insert_xx函数