视图引擎Smarty的简单使用

2023-05-16

参考: http://www.jb51.net/article/5091.htm

参考:http://baike.baidu.com/link?url=FFySw2r-dsE-lTdQgGy2DpLhciXM-JqUagEIydE_aFY3rGMnlYrf4eOOWw-fK-MFNFMp8v7ddMOrmlnIHTlP4K

其中还包含来自对慕课网的学习。

       

       什么是模版引擎 
   
 不知道从什么时候开始,有人开始对 HTML 内嵌入 Server Script 觉得不太满意。然而不论是微软的 ASP 或是开放源码的 PHP,都是属于内嵌 Server Script 的网页伺服端语言。因此也就有人想到,如果能把程序应用逻辑 (或称商业应用逻辑) 与网页呈现 (Layout) 逻辑分离的话,是不是会比较好呢? 
   
 其实这个问题早就存在已久,从交互式网页开始风行时,不论是 ASP 或是 PHP 的使用者都是身兼程序开发者与视觉设计师两种身份。可是通常这些使用者不是程序强就是美工强,如果要两者同时兼顾,那可得死掉不少脑细胞... 
   
 所以模版引擎就应运而生啦!模版引擎的目的,就是要达到上述提到的逻辑分离的功能。它能让程序开发者专注于资料的控制或是功能的达成;而视觉设计师则可专注于网页排版,让网页看起来更具有专业感!因此模版引擎很适合公司的网站开发团队使用,使每个人都能发挥其专长! 

       

       Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。


下面记录一下关于Smarty的基础使用:

1、安装Smarty

首先从Smarty官网下载:http://www.smarty.net/

然后解压出来,并且文件目录结构,修改为如下:(方面使用而已)


可以将其他不用的文件删除。

2、配置Smarty并进行简单使用

       下面我们创建如下类似目录结构(这要包括cache Smarty的缓存目录、template_c Smarty的编译结果目录、tpl Smarty的视图模板目录 —— 这配置Smarty的过程中会引用这些目录)

 

       在 test.php 文件中 配置Smarty:(记得先导入Smarty的主文件 Smarty.class.php)

<?php 
	require('../smarty-3.1.29/libs/Smarty.class.php');
	$smarty = new Smarty();

	//Smarty的口诀“五配置方法”
	//五配置的介绍
	$smarty->left_delimiter = "{"; //左定界符
	$smarty->right_delimiter = "}"; //右定界符
	$smarty->template_dir = "tpl"; //html模板的地址            //要把对应的目录创建好
	$smarty->compile_dir = "template_c"; //模板编译生成的文件
	$smarty->cache_dir = "cache"; //缓存
	//以下是开启缓存的另两个配置。因为通常不用smarty的缓存机制,所以此项为了解。
	$smarty->caching = true; //开启缓存
	$smarty->cache_lifetime = 120; //缓存时间

	//在smarty模板变量的赋值
	$smarty->assign('articletitle', '文章标题'); //注册到smarty模板里面去(变量名,变量值)

	//展示编写好的模板,该函数能对模板进行编译和展示
	$smarty->display('test.tpl');
?>
       通过 $smarty->assign('articletitle', '文章标题'); 将变量articletitle注册到Smarty模板。并且使用视图 test.tpl (当然后缀名可以为 .html,实际上网页开发也是用 .html)。

       test.tpl(在tpl目录下创建)

{$articletitle} <br/>
       这样我们就能使用刚注册到Smarty模板的变量 articletitle 了。

       访问过程为:执行test.php文件,创建Smarty对象,配置Smarty,将变量articletitle 注册到Smarty,选择视图进行显示(Smarty会对视图进行编译将视图中以{}为定界符包起来的变量解析为变量的值,然后显示在页面)。这样实现了界面层与逻辑层的分离。逻辑层通过注册数据到Smarty,通过控制显示对应的界面,界面就可以使用逻辑层返回的数据进行显示。

3、Smarty变量的访问

3.1、访问一维数组

$arr = array('title'=>'smarty的学习', 'author' => '小明');
$smarty->assign('arr', $arr);

在视图中(下面这两种方式都可以正常访问):

{$arr.title} {$arr.author} <br/>
{$arr['title']} {$arr['author']} <br/>


3.2、访问二维数组

$arr2 = array('articlecontent'=>array('title'=>'smarty的学习', 'author' => '小明'));
$smarty->assign('arr2', $arr2);
在视图中:

{$arr2['articlecontent']['title']} {$arr2['articlecontent']['author']} <br />


3.3、访问对象

	class My_Object {
		function meth1($params) {
			return $params[0].'已经'.$params[1];
		}
	}
	$myobj = new My_Object();
	$smarty->assign("myobj",$myobj);
在视图中:

输出对象
{$myobj->meth1(array('苹果','熟了'))}
<br /><br />

3.4、访问php其他数据类型

       访问php其他数据类型,与在php中使用访问类似,这里就不再给出案例。

(注:对于变量的访问,可以将访问变量的语句嵌套在 html 代码中)

4、条件判断

4.1、基本句式(视图中使用(或者说是html界面))

{if $name eq "a1"}
	Welcome Sir.
{elseif $name eq "a2"}
	Welcome Ma'am.
{else}
	Welcome, whatever you are.
{/if}
4.2、条件修饰符有很多,简单的有:eq(==)   neq(!=)  gt(>)  lt(<)

4.3、修饰词时必须和变量或常量用空格开

5、Smarty的循环

5.1、section

section、sectionelse 功能多,参数多。是Smarty用来做循环操作的函数之一。

基本属性有name和loop

       除了name和loop属性外,还有以下属性

start   循环执行的初始位置。如果该值为负数,开始位置从数组的尾部算起。例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5.非法值(超过了循环数组的下限)将被自动调整为最接近的合法值。

step    该值决定循环的步长。例如指定step = 2将只遍历下标为0、2、4等元素。如果step为负值,那么遍历数组的时候从后向前遍历。

max   设定循环最大执行次数。

show    决定是否显示该循环。

案例:

test.php中

//在smarty模板变量的赋值
	$articlelist = array(
			array(
					"title" => "第一篇文章",
					"author" => "小王",
					"content" => "第一篇文章该写点啥呢"
				),
			array(
					"title" => "第二篇文章",
					"author" => "小李",
					"content" => "又写了一篇不知所云的文章"
				)
		);
	$smarty->assign("articlelist", $articlelist);
视图中:

<!-- section 在smarty中函数的一种,函数以</函数名>结尾 -->
section循环<br />
{section name = article loop = $articlelist max=1}
	{$articlelist[article].title}
	{$articlelist[article].author}
	{$articlelist[article].content}
<br />
{/section}
<br />
5.2、foreach循环(与PHP中的foreach类似)

视图中:

foreach循环<br />
{foreach item = article from = $articlelist}
	{$article.title}
	{$article.author}
	{$article.content}
<br />
{foreachelse} <!-- 当数组为空是 显示下面的这句话-->
当前没有文章
{/foreach}
<br />

foreach循环——PHP形式<br />
{foreach $articlelist as $article}
	{$article.title}
	{$article.author}
	{$article.content}
<br />
{foreachelse}
当前没有文章
{/foreach}
<br />
建议使用类似PHP形式的foreach循环,便于记忆使用。

6、Smarty模板的引用

       将其他模板引入到当前模板:使用include

在当前模板中使用,例如:

创建入口文件 test03.php

<?php 
	require('../smarty-3.1.29/libs/Smarty.class.php');
	$smarty = new Smarty();

	//Smarty的自编口诀“五配置方法”
	//五配置的介绍
	$smarty->left_delimiter = "{"; //左定界符
	$smarty->right_delimiter = "}"; //右定界符
	$smarty->template_dir = "tpl"; //html模板的地址            //要把对应的目录创建好
	$smarty->compile_dir = "template_c"; //模板编译生成的文件
	$smarty->cache_dir = "cache"; //缓存
	//以下是开启缓存的另两个配置。因为通常不用smarty的缓存机制,所以此项为了解。
	$smarty->caching = true; //开启缓存
	$smarty->cache_lifetime = 120; //缓存时间

	//展示编写好的模板,该函数能对模板进行编译和展示
	$smarty->display('test03.tpl');
?>

创建当前模板 test03.tpl

{include file="header.tpl" sitename="哈哈"} <!-- include还有其他属性(包括 sitename),其他属性的名称可以自定义,它的值可以传给引入的模板--> <!-- 这些自定义的属性仅仅只能在引入的文件中使用,如sitename属性只能在header.tpl中使用-->
其中被引入的模板为 header.tpl,属性sitename是自定义的,可以按照PHP的命名方式进行命名。表示传递到被引入的模板的变量,可以在被引入的模板中使用该变量。

       header.tpl

头文件——{$sitename}

7、变量调节器

7.1、首字母大写 capitalize

如:{$articleTitle|capitalize}

7.2、字符串连接 cat
如:{$articleTitle|cat:" aaaa"}

7.3、日期格式化 date_format

如:{$yesterday|date_format}

      {$yesterday|date_format:" :"%A, %B %e, %Y %H:%M:%S"}

7.4、为未赋值或为空的变量指定默认值default

如:{$articleTitle|default:"no title"}

7.5、转码escape

       用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码,十六进制美化,或者javascript转码。默认是html转码。

7.6、小写lower 大写upper

将变量字符串小(大)写

如:{$articleTitle|lower}   {$articleTitle|upper}

7.7、所有的换行符将被替换成<br/>nl2br功能同PHP中nl2br()函数一样

如:{$articleTitle|nl2br}

7.8、其他函数

可以参见手册,原则上应该通过php直接处理完再赋值到smarty变量里,少用smarty函数。


8、使用php内置函数

基本格式为: {参数1|php内置函数名:参数2:参数3:...}

案例如下:

	$smarty->assign('time',time());

	$smarty->assign('str', 'abcdefg');
视图中:

Smarty函数的使用(使用PHP的内置函数)date -1<br />
在Smarty中函数的调用 | 函数名 ,其中“|”前为函数的第一个参数,函数名后为函数的第二个参数<br />
而在php中的date函数,第一个参数为时间戳,第二个参数为时间的格式。所以在使用下面的写法<br />
{"Y-m-d"|date:$time} <br />

Smarty函数的使用(使用PHP的内置函数)str_replace -2<br />
<!-- 在php中的使用 str_replace('d','h',$str) -->
{'d'|str_replace:'h':$str} <br />
9、自定义Smarty函数

案例:

	//自定义函数
	function test($params) {
		/*print_r($params);
		exit;*/
		$p1 = $params['p1'];
		$p2 = $params['p2'];
		return '传入的参数1值为'.$p1.',传入的参数2值为'.$p2;
	}

	$smarty->registerPlugin('function', 'f_test', 'test');
这样就可以在视图中使用test函数了,如下:

Smarty函数的使用——自定义函数 -3
{f_test p1='abc' p2='edf'} <!-- p1 p2 参数(或者称为属性)会打包成数组发送给f_test函数-->
10、Smarty插件的学习

10.1、什么是Smarty插件:

       Smarty的插件本质上是function函数

10.2、Smarty插件常用类型:

       functions 函数插件

       modifiers  修饰插件

       block functions 区块函数插件

10.3、如何来制作、使用插件:

(1)使用registerPlugin方法注册写好的自定义的函数

(2)将写好的插件放入Smarty解压目录中lib目录下的plugins目录里

(3)php的内置函数,可以自动以修饰插件(变量调节器插件)的形式在模板里使用

具体实现:略。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视图引擎Smarty的简单使用 的相关文章

  • php中的绘图技术

    在php中 xff0c 使用php绘图 xff0c 在访问php文件时可以出现我们绘制的图像 php绘图技术可以应用于报表的开发 验证码的设计 在介绍php绘图技术之前 xff0c 我们首先需要了解一下php中的绘图坐标系 xff1a ph
  • jpgraph绘图库的安装与配置

    以前用 PHP作图时必须要掌握复杂抽象的画图函数 xff0c 或者借助一些网上下载的画 柱形图 饼形图的类来实现 没有一个统一的chart类来实现图表的快速开发 现在我们有了一个新的选择 xff1a JpGraph 专门提供图表的类库 它使
  • 图像的灰度变换——图像旋转、图像的反色处理、对比度拉伸

    这次我们要处理的是对图像 进行旋转 操作 xff0c 具体要求 xff0c 如下 xff1a 自定义一个图像的仿射变换函数 xff0c 用于旋转给定的输入图像 xff0c 该函数的输入参数包括处理前的图像和旋转角度 输入的角度为正数 xff
  • Android+PHP 使用HttpClient提交POST的请求,使用JSON解析响应

    这里介绍一下如何让自己的Android程序具有联网功能 当然首先要有一台服务器 xff0c 如果只是进行测试的话 xff0c 可以使用局域网代替 xff08 手机连电脑wifi xff09 要求电脑已配置好Apache 43 PHP环境 下
  • Android Google开源库——Volley的简单使用

    介绍一下Android Google开源库 Volley的简单使用 volley 项目地址 https github com smanikandan14 Volley demo JSON xff0c 图像等的异步下载 xff1b 网络请求的
  • Mysql远程登陆及常用命令

    上次我们租用了阿里云的服务器 xff0c 使用windows系统 xff0c 在其服务器上安装了wamp xff0c 对于Mysql数据库这方面的远程登陆知识有些缺欠 Mysql数据库的远程登陆可使我们在自己电脑上连接服务器的数据库 xff
  • 让网页装进Android手机(将html+css+js打包成Android应用)(简单的)

    今晚尝试了一下 xff0c 将自己简单写的网页 xff08 html 43 css 43 js xff09 打包成Android应用装进手机 xff08 当然如果网页做得好的话 xff0c 采用响应式布局 xff0c 即可在手机上完美展示
  • 图像的直方图均衡化和比特平面分层

    xff08 1 xff09 自定义一个函数 xff0c 当输入为一幅图像 EXP3 1 tif 时 xff0c 能输出该图像的直方图 计算输入图像的直方图 getHist function H 61 getHist pho ima 61 i
  • 空间域滤波:图像平滑和锐化

    xff08 1 xff09 自定义一个空间域平滑滤波函数 xff0c 以达到滤除指定类型噪声 如高斯 噪声和椒盐噪声等 的 目的 xff0c 该函数的输入参数包括滤波器类型filter type 如 高斯均值滤波 中值滤波 最大 小值滤波等
  • 图像的频率域高斯低通滤波

    xff08 1 xff09 自定义一个图像的频率域高斯低通滤波处理函数 xff0c 要求该函数的输入参数包括处理前的图像ima和距频率矩形中心的距离D0 截止频率 xff0c 输出参数为滤波处理后的图像im2 自定义的高斯低通滤波器 xff
  • 2021-07-28_Ubuntu18.04如何关闭Xorg图形界面使用tty纯命令跑程序?

    痛点1 xff1a 显卡只有8G xff0c 经常gradient overflow或者CUDA OOM 痛点2 xff1a 主机连接数4k显示器 xff0c 经常系统卡住 xff0c 只有鼠标能动 xff0c 某度知道热心网友说等几分钟试
  • 彩色图像的空间域滤波

    xff08 1 xff09 RGB彩色空间向 HSI 彩色 空间的转换 xff1a 自定义一个函数 xff0c 实现RGB 彩色空间向 HSI 彩色 空间的转换 xff0c 要求该函数的输入参数为RGB彩色图像 xff0c 输出参数为HSI
  • Android中使用Handler造成内存泄露的分析和解决

    转载自 xff1a http www linuxidc com Linux 2013 12 94065 htm 什么是内存泄露 xff1f Java使用有向图机制 xff0c 通过GC自动检查内存中的对象 xff08 什么时候检查由虚拟机决
  • Java中的Scanner类

    转载自 xff1a http bbs itheima com thread 90856 1 1 html http blog sina com cn s blog 7014ad5c01018sov html java util Scanne
  • 第一次了解GitHub,在Windows下使用GitHub

    心血来潮 看了一下关于版本管理工具Git 要使用GitHub xff08 一个程序员的社区网站 xff0c 基于Git用于托管软件库 xff09 xff0c 个人觉得要先理解Git和GitHub 这里有两个参考网站 xff0c 可以做了解
  • CSS中的选择器优先级考虑

    先来看个例子 xff1a css02 html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt t
  • CSS中的定位——position属性

    CSS定位指的是 改变元素在页面中的位置 CSS定位机制 xff1a 普通流 xff1a 元素按照其在HTML中的位置顺序决定排布的过程 xff08 也就是我不对元素进行定位的默认排布 xff09 浮动 绝对布局 CSS定位包含的属性有 x
  • CSS中父div与子div——子div有内容,父div高度却为0?

    我们可能在审查网页元素时 xff0c 会发现这样的一种情况 xff1a 案例 HTMLAndCSS html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta
  • JS动画框架及案例

    JS动画效果 xff1a 综合 运动框架 move js 1 简单动画 1 1 速度动画 D01 share html 1 2 透明度动画 D02 opacity html 2 缓冲动画 2 1 缓冲动画 D03 speed html 3
  • Javascript异步编程之setTimeout与setInterval

    转载自 xff1a http www cnblogs com tugenhua0707 p 4083475 html utm source 61 tuicool amp utm medium 61 referral Javascript异步

随机推荐

  • javascript下的瀑布流效果

    以下瀑布流效果增加了本地加载数据的功能 xff0c 实际上加载更多的图片应该通过网络进行获取 xff0c 这里只是进行了本地图片传送的模拟 目录结构如下 xff1a index html lt DOCTYPE html gt lt html
  • 远程共享文件夹读写数据Software caused connection abort: recv failed和 Invalid payload size: 405

    Software caused connection abort recv failed 一般是JAR包版本不对 xff0c 我用得jcifs 1 3 3 jar包错 xff0c 改为jcifs 1 3 17 jar就可以了 span cl
  • jQuery下的瀑布流效果

    使用jQuery制作瀑布流效果 xff0c 这里需要引入jQuery库 index html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset
  • 使用js实现tab选项卡效果

    这里提供了一种制作选项卡的思路 在制作过程中首先考虑的是html结构 xff0c 元素如何摆放 xff0c 此外通过这样的摆放 xff0c 通过CSS样式是否可以达到我们所要的效果 最后通过js进行监听 xff0c 当进行选项卡切换时 xf
  • 使用js实现“别踩白块儿”游戏

    界面如下 xff1a 点击 开始游戏 xff0c 白格 将开始向下移动 xff0c 此后再每一行上开始出现一个 黑格 xff0c 对应列上按下对应的键即可消除黑格 xff0c 但不可跨行消除 xff08 即必须先消除 最近 一行上的 黑格
  • AJAX 跨域请求 - JSONP获取JSON数据

    转载自 xff1a 点击打开链接 Asynchronous JavaScript and XML Ajax 是驱动新一代 Web 站点 xff08 流行术语为 Web 2 0 站点 xff09 的关键技术 Ajax 允许在不干扰 Web 应
  • Ajax的实现和jQuery下的Ajax

    什么是Ajax呢 xff1f AJAX即 A synchronous J avascript A nd X ML xff08 异步JavaScript和XML xff09 xff0c 是指一种创建交互式网页应用的网页开发技术 AJAX 61
  • jQuery下的瀑布流效果(改)

    使用 window on 34 resize 34 waterfall 使得瀑布流列数可以动态变化 包含加载数据的模拟 useJQ html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt
  • 带有分散效果的瀑布流(jQuery实现)

    初始数据集中在窗口底部 xff0c 通过动画移动摆动到正确的位置 xff0c 同样模拟网络加载数据时 xff0c 图片也从窗口底部 动画 摆放到正确的位置 如下图所示 xff0c 这是初始数据移动的过程 移动结束后 xff0c 初始数据摆放
  • 使用jQuery、js实现必应搜索制作

    实现过程参考自 慕课网 xff0c 有关具体详情可参考视频 实现必应搜索制作 xff0c 结果如下 xff1a 点击提示框中的选项进行对应的跳转 xff08 在当前页面 xff09 xff1a 使用Ajax提交http请求 xff0c 从必
  • 网页在IE6下可能出现的小问题

    我们制作网页过程中 xff0c 需要对网页进行调试以兼容不同浏览器 这里使用IETester 针对网页在IE6进行调试 xff0c 解决一些可能出现的问题 1 在IE6可能会出现双边距 双边距出现的条件是当浮动元素的浮动方向和margin的
  • 雅虎WEB前端网站优化 -- 34条军规

    转载自 xff1a 点击打开链接 雅虎给出了优化网站加载速度的34条法则 xff08 包括Yslow规则22条 xff09 详细说明 xff0c 下载转发 ponytail 的译文 xff08 来自帕兰映像 xff09 1 Minimize
  • 91. Decode Ways(解码方法)

    这道题的关键在于推导出递推公式 xff0c 这里我将存储的数组定义为code xff0c 字符串为s xff0c code i 代表前i个字符可解码的数量 xff0c 即code i 代表的是s i 1 及之前字符的总解码数量 很明显可知c
  • PHP中的字符串定义——Heredoc结构形式

    在php中字符串类型可以用三种方法定义 xff1a 单引号形式 双引号形式和Heredoc结构形式 单引号形式和双引号的定义形式如下 xff1a lt php str string1 61 39 我是字符串 39 单引号 str strin
  • php get_magic_quotes_gpc()函数用法介绍

    转载自 xff1a 点击打开链接 magic quotes gpc函数在php中的作用是判断解析用户提示的数据 xff0c 如包括有 post get cookie过来的数据增加转义字符 xff0c 以确保这些数据不会引起程序 xff0c
  • PHP 单一入口

    转载自 xff1a 点击打开链接 单一入口概述 单一入口的应用程序就是说用一个文件处理所有的HTTP请求 xff0c 例如不管是列表页还是文章页 xff0c 都是从浏览器访问index php文件 xff0c 这个文件就是这个应用程序的单一
  • PHP下的MVC

    学习资源来自于慕课网 先来一个简单的Demo SimpleDemo 控制器C testController class php lt php class testController function show 控制器的作用是调用模型 xf
  • PHP操作mysql类的封装

    版本一 xff1a lt php 这是一个工具类 xff0c 作用是完成对数据库的操作 class SqlHelper public conn public dbname 61 34 test 34 public username 61 3
  • 简单新闻发布系统前台界面(html+css)

    运行效果如下 xff1a 图片素材 xff1a bg jpg header shadow png news icon png index html lt DOCTYPE html gt lt html lang 61 34 zh CN 34
  • 视图引擎Smarty的简单使用

    参考 xff1a http www jb51 net article 5091 htm 参考 xff1a http baike baidu com link url 61 FFySw2r dsE lTdQgGy2DpLhciXM JqUag