首页 后端开发 php教程 PHP视图引擎Smarty的简单使用

PHP视图引擎Smarty的简单使用

Jun 20, 2016 pm 01:00 PM

PHP视图引擎Smarty的简单使用

       什么是模版引擎 
   
 不知道从什么时候开始,有人开始对 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、所有的换行符将被替换成
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的内置函数,可以自动以修饰插件(变量调节器插件)的形式在模板里使用

 


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

11个最佳PHP URL缩短脚本(免费和高级) 11个最佳PHP URL缩短脚本(免费和高级) Mar 03, 2025 am 10:49 AM

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

Instagram API简介 Instagram API简介 Mar 02, 2025 am 09:32 AM

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

宣布 2025 年 PHP 形势调查 宣布 2025 年 PHP 形势调查 Mar 03, 2025 pm 04:20 PM

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

See all articles