Smarty3配置及入门语法


Posted in PHP onFebruary 22, 2017

一.Smarty3配置

下载Smarty文件

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

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

Smarty3配置及入门语法

Smarty配置

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

<?php
header("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;
?>

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

目录如下:

Smarty3配置及入门语法

检验smarty是否配置成功:

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

<?php
//引入配置文件
require ('config.php');
//向模板文件中传递值
$smarty->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读取到界定符之间的内容会试图解析它,并输出结果。在界定符之外的内容都是静态。

注释

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

{* 这儿是注释 *}

输出变量

//向要渲染的模板传递值
$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文件,内容如下:

<?php
require ('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更简单

{foreach $arrayvar as $itemvar}
{foreach $arrayvar as $keyvar=>$itemvar}

例子如下:

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

<?php
require ('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可以不指定,默认循环的步长是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文件,内容如下:

<?php
require ('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插件,还可以取得值有block和modifier,第二个参数指注册的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中的第一个参数中。

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

PHP 相关文章推荐
PHP安装攻略:常见问题解答(二)
Oct 09 PHP
模仿OSO的论坛(一)
Oct 09 PHP
SMARTY学习手记
Jan 04 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
php 常用类整理
Dec 23 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
php curl操作API接口类完整示例
May 21 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 PHP
PHP之header函数详解
Mar 02 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 #PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 #PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 #PHP
如何离线执行php任务
Feb 21 #PHP
PHP实现上传多文件示例代码
Feb 20 #PHP
微信公众号开发之通过接口删除菜单
Feb 20 #PHP
thinkphp项目如何自定义微信分享描述内容
Feb 20 #PHP
You might like
PHP中for循环与foreach的区别
2017/03/06 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
python元组拆包实现方法
2021/02/28 Python
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
工厂采购员岗位职责
2014/04/08 职场文书
最新离婚协议书范本
2014/08/19 职场文书
党员检讨书范文
2014/12/27 职场文书
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
MySQL读取JSON转换的方式
2022/03/18 MySQL