Smarty配置

来源:互联网 发布:一公升的眼泪 知乎 编辑:程序博客网 时间:2024/05/19 23:17

1.在smarty官网下载最新文件包: http://www.smarty.net/,解压缩文件包放到项目目录下。
2.相对路径引入Smarty.class.php文件

<?php    require("相对路径/Smarty.class.php"); //严格注意大小写    $smarty = new Smarty();    //配置    $samrty->left_delimiter = "{"; //左定界符    $smarty->right_delimiter = "}";//右定界符    $samrty->template_dir = "tpl";//html模板地址    $smarty->compile_dir = "template_c";//模板编译生成的文件    $samrty->cache_dir = "cache"; //缓存    $smarty->caching = true;//开启缓存(不常用)    $smarty->caching_lifetime = 120;//缓存时间(不常用)    //方法    $smarty->assgin("articletitle","文章标题");//注册变量    $smarty->display("模板地址及名称");?>

输出变量

当变量是字符串时,{$变量名}表示输出变量。当变量是数组时,输出变量的方式有两种,分别为:  a.{$arr.key}  b.{$arr['key']}当是一个对象时,可以直接通过obj->method(),调用对象的方法

条件判断
条件判断的基本句式如下:

{if $variable 条件修饰符 value1} //some{elseif $variable 条件修饰符 value2} //some{else} //some{/if}
基本的条件修饰符有:eq(等于),neq(不等于),gt(大于),lt(小于),lte(小于等于),gte(大于等于)。修饰符前后要有空格

循环
Smarty中有两种循环,分别是foreach,section,for和while
section循环
section不能循环遍历关联数组,它只能循环遍历连续数字下标的数组,如果要循环关联数组使用foreach
section可以接受name,loop,step,start,max,show,其中name和loop是必须的。name是每一次循环得到的下标,loop是垚循环的值,step循环的步长,默认为1,max是最大循环的次数,start开始循环的下标,默认为0,如果start为负数,就从数组末尾开始循环,show表示是否显示循环的内容,默认是true
如下:
在test文件夹下创建section.php文件,内容如下:

<?phprequire ('config.php');$article = array( array(  'title'=>'第一章',  'name'=>'QxQstar',  'content'=>'Smarty section循环第一章' ), array(  'title'=>'第二章',  'name'=>'QxQstar',  'content'=>'Smarty section循环第二章' ));$smarty->assign('article',$article);$smarty->display('section.tpl');?>

在tpl文件夹下创建section.tpl文件,内容如下:

<ul> {section name=item loop=$article}  <li>   {$article[item].title}   <p>作者:{$article[item].name}</p>   <p>内容:{$article[item].content}</p>  </li> {sectionelse}  没有文章 {/section}</ul>

foreach循环
foreach循环比section循环要简单,foreach的语法与php中foreach的语法很像,foreach可以做到任何section做到的功能,并且foreach更简单
例子如下:
在test文件夹中创建foreach.php文件,文件内容如下:

<?phprequire ('config.php');$articles = array( array(  'title'=>'第一章',  'name'=>'QxQstar',  'content'=>'Smarty foreach循环第一章' ), array(  'title'=>'第二章',  'name'=>'QxQstar',  'content'=>'Smarty foreach循环第二章' ));$smarty->assign('articles',$articles);$smarty->display('foreach.tpl');?>

在tpl文件夹中创建foreach.tpl文件,内容如下:

<ul> {foreach $articles as $article}  <li>   {$article.title}   <p>{$article.name}</p>   <p>{$article.content}</p>  </li>  {foreachelse}  <p>没有文章</p> {/foreach}</ul>

for循环
for循环用于创建一个简单的循环,语法如下:

{for $variable = $startValue to $entValue step $step}{for $i = 0 to 10 step 2} {$i}{foreach}不能进行循环{/for}
step可以不指定,默认循环的步长是1for还可以指定一个max属性,max属性用于指定循环的次数与foreach循环类似,for循环也有一个forelse。{forelse}在循环不能遍历的时候执行

while循环

Smarty的while循环与php中的while循环类似,语法如下:{while $variable > 0}//some{/while}在循环中使用{break}可以停止循环,{continue}退出当前循环进入下一次循环

插件
Smarty插件的实质是函数,插件的类型有三种,分别是function插件,modifier插件(变量调节插件),block插件
使用插件

function插件的使用:{funcName param1 = value...}modifier插件的使用:{$variable | modifierName:param1...}block插件的使用:{blockName param1 = value...}  {$content}{/blockName}

如:

//function插件的使用{include file='header.tpl'}//modifier插件的使用{'abc'|cat:'d'}//block插件的使用{textformat wrap = 10}abc defghikj lmn{/textformat}

制作插件
制作插件的方式有三种

1.使用registerPlugin函数注册写好的自定义函数2.将写好的插件放在smarty目录中的Plugins目录里3.PHP内置函数可以自动的以修饰插件(变量调节插件)的形式在模板中使用使用registerPlugin函数注册自定义插件,例子如下在test文件夹下创建defineFunc.php文件,内容如下:
<?phprequire ('config.php');function test($params){ $p1 = $params['p1']; $p2 = $params['p2']; return $p1.$p2;}$smarty->registerPlugin('function','f_test','test');$smarty->display('definedFunc.tpl');?>
在tpl文件夹下创建一个defineFunc.tpl文件,内容如下:{f_test p1='learn' p2=' Smarty'}registerPlugin函数的第一个参数说明注册的这段程序的类型,在这里是function说明注册的是一个function插件,还可以取得值有blockmodifier,第二个参数指注册的Smarty function插件名,第三个参数指自定义函数名,第二个参数和第三个参数可以相同。在Smarty中当执行到{f_test p1='learn' p2=' Smarty'}时,p1和p2会被打包成一个数组传递到我们定义的test函数中去。

通过网Plugins文件夹中添加文件的方式制作插件

1.制作function插件在Plugins文件夹下创建一个function.test.php文件(function表示这个一个function插件,test表示插件名),内容如下:function smarty_function_test($params){ //$params是一个关联数组 $w = $params['w']; $h = $params['h']; return $w * $h;}在模板中直接使用test function插件{test h = 3 w = 5}这两个参数会被打包成一个数组传递到smarty_function_test函数中
2.制作modifier插件在Plugins文件夹下创建一个modifier.test2.php文件(modifier表示这个一个modifier插件,test2表示插件名),内容如下:function smarty_modifier_test2($utime,$formate){ return date($formate,$utime);}在模板中使用test2 modifier插件{$time|test2:'Y-m-d H-i-s'}定义modifier插件和function插件有所不同,function插件的自定义函数只接收一个数组参数,modifier插件的自定义函数将接收到的参数一一列举出来
3.制作block插件在Plugins文件夹下创建一个block.test3.php文件(block表示这个一个block插件,test3表示插件名),内容如下:function smarty_block_test3($params ,$content){ $replace = $params['replace']; $maxnum = $params['maxnum']; if($replace == 'true'){  str_replace(',', ',', $content);  str_replace('。', '.', $content); } $content = substr($content,0,$maxnum); return $content;}在模板中使用test3 block插件{test3 replace='true' maxnum = 6}abcdfedddderere{/test3}{test3}{/test3}之间的内容传递到smarty_block_test3中的第二个参数中,test3后跟着的参数打包成一个数组传递到smarty_block_test3中的第一个参数中。
原创粉丝点击