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获取网页内容方法总结
Dec 04 PHP
php采集时被封ip的解决方法
Aug 29 PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
php实现的农历算法实例
Aug 11 PHP
PHP常用的小程序代码段
Nov 14 PHP
smarty自定义函数用法示例
May 20 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
使用python3实现操作串口详解
2019/01/01 Python
python中p-value的实现方式
2019/12/16 Python
Pytorch之Variable的用法
2019/12/31 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
计算机软件专业求职信
2014/06/10 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
三八活动策划方案
2014/08/17 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
python计算列表元素与乘积详情
2022/08/05 Python