《Android和PHP开发最佳实践 》一3.5 认识Smarty模板引擎

3.5 认识Smarty模板引擎

如果你说学过PHP而没学过Smarty模板引擎,我相信所有的面试官都会觉得你在撒谎。虽然PHP语言本身就可以嵌入到HTML页面中去进行数据展现,但是这样做我们不仅需要书写大量的<?php ?>标签,而且在某些地方还需要嵌入大量的冗余代码,另外也不利于逻辑的解耦和分离。所以,在项目中我们还是需要一个专门的模板引擎,而Smarty就是PHP语言在这个领域的不二选择了。
目前,最新的Smarty版本已经出到3.x,应该说与2.x版本相比做了很大的改进,接下来简单介绍一下Smarty的使用。实际上,Smarty的下载包中本来就包含了一些实例代码。首先,从官方下载地址(http://www.smarty.net/download)下载最新的稳定的开发包版本(Latest Stable Release),我们在这里使用的是Smarty 3.1.5版本,该版本必须运行于PHP 5.2以上的版本中。
解压之后,我们把Smarty-3.1.5重新命名为smarty并放入我们前面配置好的站点目录,然后在浏览器中打开demo地址(http://php-demo/smarty/demo/),打开的界面如图3-15所示。

小贴士:如果你找不到站点目录,请返回查看3.2.3节中Apache配置虚拟主机的部分内容。
以上这个界面就是由Smarty模板引擎渲染出来的页面,其对应的PHP文件的代码,见代码清单3-15,已添加注释,方便读者阅读。
代码清单 3-15

<?php
// 包含 Smarty 类库
require('.../libs/Smarty.class.php');
// 初始化 Smarty 对象
$smarty = new Smarty;
// 初始化 Smarty 配置
//$smarty->force_compile = true;
$smarty->debugging = true;
$smarty->caching = true;
$smarty->cache_lifetime = 120;
// 各种变量赋值
$smarty->assign("Name","Fred Irving Johnathan Bradley Peppergill",true);
$smarty->assign("FirstName",array("John","Mary","James","Henry"));
$smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));
$smarty->assign("Class",array(array("A","B","C","D"),array("E","F","G","H"),
array("I","J","K","L"),array("M","N","O","P")));
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell"
=> "3"),array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
$smarty->assign("option_values", array("NY","NE","KS","IA","OK","TX"));
$smarty->assign("option_output", array("New York","Nebraska","Kansas","Iowa",
"Oklahoma","Texas"));
$smarty->assign("option_selected", "NE");
// 渲染相应模板
$smarty->display('index.tpl');
?>

从上面的代码我们可以很清晰地看到Smarty的一般使用过程:先初始化Smarty对象,然后配置Smarty参数,接着就是进行各种变量的赋值,最后在模板页面展现出来。对于本例,大家可以看看index.tpl中的模板写法,当然Smarty的用法还是很丰富的,想学好它,最好的老师就是官方文档了,请参考“http://www.smarty.net/docs/en/”。以下我们也简单介绍几种在开发时需要掌握的核心要点。
1. 常用配置选项
在使用Smarty模板引擎之前,我们必须先学习如何配置Smarty的选项。而在Smarty的常见选项中,我们首先必须了解4个最基本的目录选项。
模板目录(template):本目录用于存储模板文件,需要渲染对应文件时把文件相对地址作为参数传入display方法即可。比如,我们有一个模板文件地址位于template/test/index.tpl,那么我们则应当使用“$smarty->display('test/index.tpl');”语句来渲染该模板。
编译模板目录(template_c):本目录主要用于存储Smarty模板引擎产生的模板编译文件,Smarty也正是使用这种方法来提高执行效率的。当然,我们在部署项目时一定要注意该目录必须是可写的。
缓存目录(cache):Smarty允许把展示过的模板缓存起来,使用此功能将进一步提高模板引擎的运行速度。当然,我们还可以通过设置cache_lifetime属性来控制缓存文件的有效时间。
配置目录(configs):这个目录可以用于保存Smarty模板引擎的配置文件,不过在实际项目中使用得比较少,我们经常会把配置放入项目统一的配置目录。
在实际项目中我们经常使用继承和重载的方式来定制和配置我们自己的Smarty模板类。比如,在代码清单3-16中,我们就实现了一个自定义的My_Smarty类,此类中设置了Smarty模板的必要目录和缓存的生效时间。
代码清单 3-16

<?php
// 包含 Smarty 类库
require 'Smarty.class.php';

// 定义自己的模板类
class My_Smarty extends Smarty
{
    function __construct()
    {
        // 重载 Smarty 基类
        parent::__construct();
        // 配置目录
        $this->setTemplateDir('/path/to/templates/');
        $this->setCompileDir('/path/to/templates_c/');
        $this->setConfigDir('/path/to/configs/');
        $this->setCacheDir('/path/to/cache/');
        // 配置缓存
        $this->caching = true;
        $this->cache_lifetime = 60;
        // 设置默认变量
        $this->assign('app_name', 'My App');
    }
}
?>

在上述代码中,setTemplateDir方法用于设置模板目录,setCompileDir方法用于设置编译过的中间模板目录,setConfigDir和setCacheDir方法分别用于设置Smarty模板的配置文件和缓存文件的目录。
2. 常用模板语法
Smarty 3.0中的语法实际上和PHP的语法已经比较接近了,使用起来相当方便。接下来让我们来熟悉一下Smarty模板语言的基本用法。首先,我们要知道所有的Smarty的默认界限符号是大括号(当然这个也是可以设置的)。因此,我们可以通过类似于“{$var}”的写法来获取Smarty变量“var”的值。其次,Smarty中为我们提供了大量的字符串辅助标签,非常方便,例如,如果需要把某个变量的首字母大写,使用方法如代码清单3-17所示。
代码清单 3-17

{$articleTitle|capitalize}

另外,如果我们想把时间戳转化为需要的时间格式,使用方法如代码清单3-18所示。
代码清单 3-18

{$smarty.now|date_format}
{$smarty.now|date_format:"%Y-%m-%d"}

此外,我们还可以使用代码清单3-19中的类似方法来过滤非法字符,避免XSS(跨站攻击)的风险。
代码清单 3-19

{$articleTitle|escape:'html'}
{$articleTitle|escape:'htmlall'}

接下来,我们还会介绍一下在展示过程中最常用到的循环语句的写法。实际上在Smarty中有两种最常用到的循环语句写法,一种是“{section}”,另一种是“{foreach}”。现在假设我们需要循环一个散列数组列表“$userList”,散列数组中包含“id”和“name”两个字段,示例见代码清单3-20,大家可以好好理解一下。
代码清单 3-20

{ 注释:使用section标签循环 }
{section name=user loop=$userList}
    ID : {$userList[user].id}
    NAME : {$userList[user].name}
{/section}

{ 注释:使用foreach标签循环 }
{foreach $userList as $user}
    ID : {$user.id}
    NAME : {$user.name}
{/foreach}

从上面的代码中可以看出,Smarty 3.0的foreach用法已经和PHP的语法非常类似了,既容易理解又方便实用,推荐大家使用。另外,在Smarty中注释默认使用的是“{...}”标签,这个也需要大家了解一下。
由于篇幅限制,Smarty模板引擎的基本使用我们介绍到这里,关于其更多的信息请大家参考官方的文档并动手实践一下,毕竟Smarty模板也是使用PHP进行服务端开发的必不可少的一项技能。

时间: 2024-10-06 07:38:08

《Android和PHP开发最佳实践 》一3.5 认识Smarty模板引擎的相关文章

《Android和PHP开发最佳实践》一3.1 PHP开发基础

3.1 PHP开发基础 编写本章之前,笔者在考虑一个问题,那就是"如何把一本书的内容压缩到短短的一章中".这确实是一个难题!但是,虽然篇幅有限,本书还是会尽量使用最简洁明了的语言和最易于理解的实例,来帮助大家以最快的速度认识和了解PHP的开发. 3.1.1 PHP语言简介 PHP(Hypertext Preprocessor)是目前最流行的服务端脚本语言之一.近年来,随着互联网的飞速发展,使用PHP语言进行互联网应用开发也变得逐渐火热起来,其特点是简单.快速.灵活,主要应用于各大门户网

《Android和PHP开发最佳实践 》一导读

前 言 2012年,移动互联网革命正在如火如荼地进行,一个充满机遇的巨大市场正在开启,无论是创业者还是从业者都需要做好准备.Android和PHP两种技术,作为目前移动领域和互联网领域中的热门技术,已经受到广大开发者们的关注. 本书是目前市面上唯一一本同时讲述Android客户端开发和PHP服务端开发两方面内容,并且把Android移动互联网应用开发的完整解决方案分析透彻的书籍.通过本书,您不仅可以学习到Android客户端开发技巧,而且可以掌握PHP服务端开发的精华,甚至还可以开拓软件架构的思

《Android和PHP开发最佳实践》一2.7 Android应用界面

2.7 Android应用界面 Android应用界面系统,即Android UI(User Interface)系统是Android应用框架最核心的内容之一,也是开发者们需要重点掌握的内容.如果我们把Android应用也分为前后端两部分的话,那么之前介绍的核心要点和四大组件等都属于后端,而Android UI系统则属于前端.后端保证应用的稳定运行,而前端则决定应用的外观和体验.对于一个优秀的Android应用来说,漂亮的外观和流畅的体验是必不可少的.接下来,我们便来学习Android外观系统的

《Android和PHP开发最佳实践》一2.10 Android开发环境

2.10 Android开发环境 前面我们已经学习了Android系统中最重要的基础概念的内容,那么接下来就要开始正式进入Android应用的实战开发阶段."工欲善其事,必先利其器",因此,我们先来熟悉Android应用的开发环境吧. Android应用的开发环境是基于Eclipse平台的,Eclipse的强大无需多说,它当然也适应于Windows XP.Mac OS.Linux等多种操作系统.另外,我们还需要安装一些必备的开发工具包,所需要的软件见表2-8. 2.10.1 开发环境的

《Android和PHP开发最佳实践》一1.3 如何学习Android和PHP

1.3 如何学习Android和PHP 前面我们已经讨论过"为何学"的问题,大家应该对Android加PHP这套应用开发解决方案有了大致的了解.接下来介绍"如何学"的问题,由于本书的内容比较广泛,既涉及客户端开发的技术也包含很多服务端开发的内容,所以在正式开始学习本书之前,先搞清楚应该使用什么样的学习方法比较有效是非常有必要的.接下来,笔者会把这个问题分解为以下几个部分来探讨. 1.3.1 如何学习Android 由于Android学习是本书最核心的内容,因此我们先

《Android和PHP开发最佳实践 》一3.6 开发框架简介

3.6 开发框架简介 前面大家已经学习了PHP模板引擎Smarty的用法,也简单了解了PHP的官方框架Zend Framework,接下来本书将给大家介绍一个基于Zend Framework和Smarty之上的强大的PHP开发框架,即Hush Framework.本书后面微博实例的服务端程序也将采用该框架进行开发.在实际项目中,我们通常要先选择一个比较适合项目特点的框架,然后,在这个框架的基础上进行开发,这个过程我们通常称为"框架选型".其实,在之前的3.4节中我们已经介绍和分析了四种

《Android和PHP开发最佳实践》一2.3 Android应用框架

2.3 Android应用框架 前面介绍了Android的系统框架,主要目的是让大家对Android系统有整体的概念,也为日后更深入的学习打好基础.然而,目前我们更需要重点学习和掌握的则是Android的应用框架,因为是否能掌握和理解Android应用框架,直接关系到是否能学好Android应用开发. Android的应用框架是一个庞大的体系,想要理解透彻并不是那么简单的事情,但是,好在其中有一些比较清晰的脉络可以帮助我们快速地熟悉这个系统,因此抓住这些脉络中的核心要点对于能否学好Android

《Android和PHP开发最佳实践》一1.1 移动互联网时代的来临

1.1 移动互联网时代的来临 2011年,Android操作系统就已经占领了全球智能手机市场份额的半壁江山,霸主的地位彰显无遗(如图1-1所示).在国内,随着各大手机厂商的更新换代,Android操作系统的占有率也在火速上升中:中国移动公司已经早早推出了自己基于Android的OMS系统和OPhone,甚至连各大互联网巨头也在纷纷推出自己基于Android的手机产品.据统计,2012年内全球智能手机市场增长率达到49%,中国移动互联网用户量已经突破4亿,手机用户量也已经超越了PC. 看到这里,相

《Android和PHP开发最佳实践》一第1章 学 前 必 读

第1章 学 前 必 读 在学习任何知识之前,做好准备工作是非常有必要的.在本章,我们先来了解一下目前正如火如荼的移动互联网时代的大背景,然后我们会讲清楚我们为何要学习Android和PHP这套组合方案,以及学习Android和PHP开发的大体思路和学习方法.相信大家读完本章以后,不仅会对Android和PHP这个强大的组合更感兴趣,而且之后的学习之路会更加顺畅.