一.Smarty3配置
下载Smarty文件
在Smarty的官方网站下载Smarty文件,解压下载到的Smarty文件,Smarty的库文件就在libs文件夹中。
我使用的PHP调试环境的程序集成包是phpstudy,默认在D盘会有一个WWW的文件夹,在WWW文件夹中创建一个testSmarty的文件夹,testSmarty文件夹就是本次练习Smarty的项目根目录。在testSmarty中创建一个smarty的文件夹,并将libs中的文件复制到这个smarty文件夹中。目录结构如下:
Smarty配置
在testSmarty文件夹中创建一个test文件夹,在这个文件夹中创建一个config.php文件,内容如下:
<"content-type:text/html;charset=utf-8"); //引入核心文件并实例化 require ('/WWW/testSmarty/smarty/Smarty.class.php'); $smarty = new Smarty(); //配置 //模板文件的路径 $smarty->template_dir = '/WWW/testSmarty/test/tpl'; //模板文件编译后得到的文件的路径 $smarty->compile_dir = '/WWW/testSmarty/test/template_c'; //缓冲文件的路径 $smarty->cache_dir = '/WWW/testSmarty/test/cache'; //开启缓冲,缓冲默认是关闭的 $smarty->caching = true; //缓冲的保留时间 $smarty->cache_lifetime = 120; "text-align: center">检验smarty是否配置成功:
在test文件夹下创建一个start.php文件,文件内容如下:
<"color: #ff0000">注意:在我这儿Apache是800端口如果浏览器中能够显示出hello Smarty,则说明Smarty配置成功。
二.入门语法
界定符
Smarty的标签是位于界定符之间,默认界定符是{和},界定符是可以改变的。在配置文件中对界定符进行修改,如下:
//将左界定符改为#
$smarty->left_delimiter = '#';
//将右界定符改为#
$smarty->right_delimiter = '#';当Smarty读取到界定符之间的内容会试图解析它,并输出结果。在界定符之外的内容都是静态。
注释
注释是以*开头*结尾的,外面包着界定符,如下:
{* 这儿是注释 *}
输出变量
//向要渲染的模板传递值 $smarty->assign('变量名',值)传递的值可以是字符串,数组也能是对象。
当变量是字符串时,{$变量名}表示输出变量。
当变量是数组时,输出变量的方式有两种,分别为:
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文件,内容如下:
<"htmlcode"><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更简单
{foreach $arrayvar as $itemvar} {foreach $arrayvar as $keyvar=>$itemvar}例子如下:
在test文件夹中创建foreach.php文件,文件内容如下:
<"htmlcode"><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可以不指定,默认循环的步长是1。for还可以指定一个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 def ghikj lmn {/textformat}制作插件
制作插件的方式有三种
1.使用registerPlugin函数注册写好的自定义函数
2.将写好的插件放在smarty目录中的Plugins目录里
3.PHP内置函数可以自动的以修饰插件(变量调节插件)的形式在模板中使用
使用registerPlugin函数注册自定义插件,例子如下
在test文件夹下创建defineFunc.php文件,内容如下:
<"color: #ff6600">1.制作function插件在Plugins文件夹下创建一个function.test.php文件(function表示这个一个function插件,test表示插件名),内容如下:
function smarty_function_test($params){ //$params是一个关联数组 $w = $params['w']; $h = $params['h']; return $w * $h; } "color: #ff0000">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中的第一个参数中。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
标签:Smarty3
相思资源网 Design By www.200059.com广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com相思资源网 Design By www.200059.com暂无Smarty3配置及入门语法的评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?