Smarty3配置及入门语法

一.Smarty3配置

下载Smarty文件

在Smarty的官方网站下载Smarty文件,解压下载到的Smarty文件,Smarty的库文件就在libs文件夹中。

我使用的PHP调试环境的程序集成包是PHPstudy,认在D盘会有一个WWW的文件夹,在WWW文件夹中创建一个testSmarty的文件夹,testSmarty文件夹就是本次练习Smarty的项目根目录。在testSmarty中创建一个smarty的文件夹,并将libs中的文件复制到这个smarty文件夹中。目录结构如下:

Smarty配置

在testSmarty文件夹中创建一个test文件夹,在这文件夹中创建一个config.PHP文件内容如下:

rush:PHP;"> 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; ?>

在设置路径的时候我使用的是绝对路径,也能使用相对路径。依据设置的路径,还要在test文件夹中创建tpl,template_c和cache文件夹。

目录如下:

检验smarty是否配置成功:

在test文件夹下创建一个start.PHP文件文件内容如下:

rush:PHP;"> assign('text','hello Smarty'); //渲染模板 $smarty->display('start.tpl'); ?>

在tpl文件中创建一个start.tpl文件内容如下:

{$text}

模板文件的后缀并不是非得是tpl

在浏览器中输入localhost:800/testSmarty/test/start.PHP

注意:

在我这儿Apache是800端口

如果浏览器中能够显示出hello Smarty,则说明Smarty配置成功。

二.入门语法

界定符

Smarty的标签是位于界定符之间,认界定符是{和},界定符是可以改变的。在配置文件中对界定符进行修改,如下:

  //将左界定符改为#

$smarty->left_delimiter = '#'; //将右界定符改为# $smarty->right_delimiter = '#';

当Smarty读取到界定符之间的内容会试图解析它,并输出结果。在界定符之外的内容都是静态。

注释

注释是以*开头*结尾的,外面包着界定符,如下:

{* 这儿是注释 *}

输出变量

assign('变量名',值)

传递的值可以是字符串,数组也能是对象。

当变量是字符串时,{$变量名}表示输出变量。

当变量是数组时,输出变量的方式有两种,分别为:

  a.{$arr.key}

  b.{$arr['key']}

当是一个对象时,可以直接通过obj->method(),调用对象的方法

条件判断

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

rush:PHP;"> {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文件内容如下:

rush:PHP;"> '第一章','name'=>'QxQstar','content'=>'Smarty section循环第一章' ),array( 'title'=>'第二章','content'=>'Smarty section循环第二章' ) ); $smarty->assign('article',$article); $smarty->display('section.tpl'); ?>

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

rush:xhtml;">
    {section name=item loop=$article}
  • {$article[item].title}

    作者:{$article[item].name}

    内容:{$article[item].content}

  • {sectionelse} 没有文章 {/section}

foreach循环

foreach循环比section循环要简单,foreach的语法与PHP中foreach的语法很像,foreach可以做到任何section做到的功能,并且foreach更简单

$itemvar}

例子如下:

在test文件夹中创建foreach.PHP文件文件内容如下:

rush:PHP;"> '第一章','content'=>'Smarty foreach循环第一章' ),'content'=>'Smarty foreach循环第二章' ) ); $smarty->assign('articles',$articles); $smarty->display('foreach.tpl'); ?>

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

rush:xhtml;">
    {foreach $articles as $article}
  • {$article.title}

    {$article.name}

    {$article.content}

  • {foreachelse}

    没有文章

    {/foreach}

for循环

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

{for $variable = $startValue to $entValue step $step}

rush:PHP;"> {for $i = 0 to 10 step 2} {$i} {foreach} 不能进行循环 {/for}

step可以不指定,认循环的步长是1。for还可以指定一个max属性,max属性用于指定循环的次数

与foreach循环类似,for循环也有一个forelse。{forelse}在循环不能遍历的时候执行

while循环

Smarty的while循环与PHP中的while循环类似,语法如下:

0} //some {/while}

在循环中使用{break}可以停止循环,{continue}退出当前循环进入下一次循环

插件

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

使用插件

function插件的使用:{funcName param1 = value...}

modifier插件的使用:{$variable | modifierName:param1...}

block插件的使用:

rush:PHP;"> {blockName param1 = value...}   {$content} {/blockName}

如:

rush:PHP;"> //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文件内容如下:

rush:PHP;"> registerPlugin('function','f_test','test'); $smarty->display('definedFunc.tpl'); ?>

在tpl文件夹下创建一个defineFunc.tpl文件内容如下:

{f_test p1='learn' p2=' Smarty'}

registerPlugin函数的第一个参数说明注册的这段程序的类型,在这里是function说明注册的是一个function插件,还可以取得值有block和modifier,第二个参数指注册的Smarty function插件名,第三个参数指自定义函数名,第二个参数和第三个参数可以相同。

在Smarty中当执行到{f_test p1='learn' p2=' Smarty'}时,p1和p2会被打包成一个数组传递到我们定义的test函数中去。

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

1.制作function插件

在Plugins文件夹下创建一个function.test.PHP文件(function表示这个一个function插件,test表示插件名),内容如下:

在模板中直接使用test function插件

{test h = 3 w = 5}

这两个参数会被打包成一个数组传递到smarty_function_test函数

2.制作modifier插件

在Plugins文件夹下创建一个modifier.test2.PHP文件(modifier表示这个一个modifier插件,test2表示插件名),内容如下:

rush:PHP;"> 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表示插件名),内容如下:

rush:PHP;"> function smarty_block_test3($params,$content){ $replace = $params['replace']; $maxnum = $params['maxnum']; if($replace == 'true'){ str_replace(',',',$content); str_replace('。','.',$content); } $content = substr($content,$maxnum); return $content; }

在模板中使用test3 block插件

rush:PHP;"> {test3 replace='true' maxnum = 6} abcdfedddderere {/test3}

{test3}{/test3}之间的内容传递到smarty_block_test3中的第二个参数中,test3后跟着的参数打包成一个数组传递到smarty_block_test3中的第一个参数中。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程之家!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用