smarty php 模板开发

简介: 引用:http://baike.baidu.com/view/399896.htm Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。

引用:http://baike.baidu.com/view/399896.htm

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

 

目录

什么是PHP模板
Smarty优点
不适合使用Smarty的地方
Smarty的诞生
Smarty简明教程
判断
循环
常见问题
展开
什么是PHP模板
Smarty优点
不适合使用Smarty的地方
Smarty的诞生
Smarty简明教程
判断
循环
常见问题
展开
 

编辑本段什么是PHP模板

  该
   Smarty样板引擎运作示意图

Smarty样板引擎运作示意图

如何使我的 PHP脚本从设计中独立出来?这无疑地是在PHP邮件列表上所提问的最多的问题之一。虽然PHP被标榜为“HTML嵌入式语言”,在写过许多PHP和HTML混合式的工程之后,我产生了一个分离表单和内容的想法。而且,在许多公司里规划设计者的角色和程序设计者是分开的。于是,这样的一个模板解决方案产生了……
 
  例如在一个公司,一个 应用程序的开发流程如下:在提交计划文档之后,界面设计者[美工]制作了网站的外观模型,然后把它交给 后台程序员。程序员使用PHP实现商业逻辑,同时使用外观模型做成基本架构。然后工程被返回到HTML页面设计者继续完善。就这样工程可能在后台程序员和页面设计者之间来来回回好几次。由于后台程序员不喜欢干预任何有关HTML标签,同时也不需要美工们和PHP代码混在一起;美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的模板支持就显得很重要了。
 
  纵观现今存在的许多PHP模板解决方案(比如 PHPLIB),大多数都只是提供了用模板取代变量和将动态区块的功能有限的格式化的基本方法。但是我们的需求比这个要高的多。我们完全不想要PHP程序员去设计HTML页面,可是这又是不可避免的。例如:如果美工想要在动态区块之间交替不同的背景颜色,他就可能得和程序员预先说好。同样,美工们也应该有自己对于页面设计的配置文件,这同样可以通过变量把他们拉到模板里边去
 

编辑本段Smarty优点

  1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。
 
  2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)
 
  3. 缓存技术:Smarty选用的一种 缓存技术,它可以将用户最终看到的 HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。
 
  4. 插件技术:Smarty可以 自定义 插件。插件实际就是一些自定义的函数。
 
  5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。
 

编辑本段不适合使用Smarty的地方

  需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。
 
  小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。
 
  (PS:不过为了整个项目的规范,请大家尝试去使用模板引擎。其实习惯了,开发速度会更加快,以上是没有用习惯模板引擎的开发者遇到的问题)
 

编辑本段Smarty的诞生

  早在1999年后期,我们就已经开始为模板引擎写说明文档。在完成这个文档之后,我们开始用C写一个模板引擎,并有希望被包含到PHP里去。在 撞上了许多的技术难题的同时,“什么是模板应该做的,什么不该做”这个问题,也被热烈的讨论着。从这些经验,我们决定应该用PHP将模板引擎写成一个类,让任何觉得合适的人使用它。所以我们写了一个引擎,从此就有了Smarty。(注:这个类以前从来没有公开发表过)。这个类几乎达到了我们所有的要求:常规变量替换,支持包括其他模板,使用配置文件集成设置,嵌入PHP代码,限制'if'语句的作用,还有更多的可以多层嵌套的健壮的动态区块。它用常规表达式做到这一切,于是代码变得相当令人费解。在每次调用的时候,都要去解析那些语法和常规表达式,于是在大型应用的时候,它显然慢了下来。在程序员的眼光看来,最大的问题还是使用PHP脚本建立和处理模板和动态区块的所有必要工作。我们应该如何使他变得更简单?
 
  我们可以想象Smarty应该有怎样的最后表现。我们知道PHP代码如果没有了模板解析的开销将有多快,我们也知道从一般的美工看来PHP语言是多么的“恐怖”,然而这一切可以被一种更简单的模板语法掩饰掉。我们应该怎样把这两种方法的长处结合起来?
 
  于是,Smarty诞生了……
 

编辑本段Smarty简明教程

   一. 安装
 
  下载最新版本的Smarty。解压下载的文件(目录结构还蛮复杂的)。接下来演示给大家一个安装实例,看过应该会举一反三的。
 
  (1) 在根目录下建立了新的目录learn/,再在learn/里建立一个目录smarty/。将刚才 解压缩出来的目录的libs/拷贝到smarty/里,再在smarty/里新建templates目录,templates里新建cache/,templates/,templates_c/, config/。
 
  (2) 新建一个模板文件:index.tpl,将此文件放在learn/smarty/templates/templates目录下,代码如下:
 
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"此处DOCTYPE
 
  声明不全,下午纠结了好一会,终于看到了,新手朋友们关注下">
 
  <html>
 
  <head>
 
  <metahttp-equiv="Content-Type" content="text/html;charset=gb2312">
 
  <title>Smarty</title></head>
 
  <body>{#$hello#}</body>
 
  </html>
 
  新建index.php,将此文件放在learn/下:
 
  <?php
 
  require 'smarty/libs/Smarty.class.php';
 
  $smarty = new Smarty();//设置各个目录的路径,这里是安装的重点
 
  $smarty->template_dir ="smarty/templates/templates";
 
  $smarty->compile_dir ="smarty/templates/templates_c";
 
  $smarty->config_dir = "smarty/templates/config";
 
  $smarty->cache_dir ="smarty/templates/cache";
 
  //smarty模板有高速缓存的功能,如果这里是true的话即打开caching,但是会造成网页不立即更新的问题,当然也可以通过其他的办法解决
 
  $smarty->caching = false;
 
  $smarty->left_delimiter = "{#"; //重新定义边界,因为默认边界“{}“符,在html页面中嵌入js脚本文件编写代码段时使用的就是”{}“符,自定义边界符还可以是<{ }>, {/ /} 等
 
  $smarty->right_delimiter = "#}";
 
  $hello = "Hello World!";//赋值
 
  $smarty->assign("hello",$hello);//引用模板文件
 
  $smarty->display('index.tpl');?>
 
  (3) 执行index.php就能看到Hello World!了。
 
   二. 赋值
 
  在模板文件中需要替换的值用大括号{}括起来,值的前面还要加$号。例如{$hello}。这里可以是 数组,比如{$hello.item1},{$hello.item2}…
 
  而PHP源文件中只需要一个简单的函数assign(var , value)。
 
  简单的例子:
 
  *.tpl:
 
  *.php:
 
  $hello[name]= “Mr. Green”;
 
  $hello[time]=”morning”;
 
  $smarty->assign(“exp”,$hello);
 
  output:
 
  Hello,Mr.Green!Good morning
 
   三. 引用
 
  网站中的网页一般header和footer是可以共用的,所以只要在每个tpl中引用它们就可以了。
 
  示例:*.tpl:
 
  {include file="header.tpl"}
 
  {* body of template goes here *}
 
  {include file="footer.tpl"}
 

编辑本段判断

  模板文件中可以使用if else等判断语句,即可以将一些逻辑程序放在模板里。"eq","ne", "neq", "gt", "lt","lte", "le", "gte" "ge","is even", "is odd", "is not even", "is notodd", "not", "mod", "div by", "evenby", "odd by","==","!=",">","<","<=",">="这些是if中可以用到的比较。看看就能知道什么意思吧。
 
  eq相等,
 
  ne、neq不相等,
 
  gt大于,
 
  lt小于,
 
  gte、ge大于等于,
 
  lte、le 小于等于,
 
  not非, mod求模。
 
  is [not] div by是否能被某数整除,
 
  ,B z M E m I w0 is [not] even是否为偶数,
 
  $a is [not] even by $b即($a / $b) % 2 == 0,
 
  is [not] odd是否为奇,
 
  $a is not odd by $b即($a / $b) % 2 != 0
 
  示例:
 
  {if $name eq"Fred"}
 
  WelcomeSir.
 
  {elseif $name eq"Wilma"}
 
  WelcomeMa'am.
 
  {else}
 
  Welcome,whatever you are.
 
  {/if}
 

编辑本段循环

  在Smarty里使用循环遍历数组的方法是section,如何赋值遍历都是在模板中解决,php源文件中只要一个assign就能解决问题。
 
  示例:
 
  {* this examplewill print out all the values of the $custid array *}
 
  {section name=customer loop=$custid}
 
  id: {$custid[customer]}<br>
 
  {/section}
 
  OUTPUT:
 
  id: 1000<br>id: 1001<br>id: 1002<br>
 

编辑本段常见问题

  Smarty将所有大括号{}里的东西都视为自己的逻辑程序,于是我们在网页中想插入javascript函数就需要literal的帮忙了,literal的功能就是忽略大括号{}。
 
  示例:
 
  {literal}
 
  <script language=javascript>
 
  function isblank(field) {
 
  if (field.value == '') { return false;
 
  }else{
 
  document.loginform.submit();
 
  return true;
 
  }
 
  }
 
  </script>
 
  {/literal}
 
 
 
扩展阅读:
开放分类:
webPHP模板cmssmartycms
相关文章
|
7天前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
|
7天前
|
关系型数据库 MySQL
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
web简易开发(二){html5+php实现文件上传及通过关键字搜索已上传图片)}
|
7天前
|
数据库连接 PHP 数据库
【PHP开发专栏】PHP错误处理与异常捕获
【4月更文挑战第30天】PHP是流行的服务器端脚本语言,广泛用于动态网站和应用开发。本文深入探讨PHP的错误处理和异常捕获机制,分为三部分:首先介绍PHP错误处理,包括错误级别(如E_NOTICE、E_WARNING、E_ERROR)和错误处理函数;其次,讲解异常捕获,利用try-catch处理程序错误,自定义异常类;最后,讨论两者在数据库操作、文件操作和网络请求等场景的应用及最佳实践。示例代码展示了如何自定义错误处理器和异常处理。
|
7天前
|
安全 前端开发 PHP
采用PHP开发的医院安全(不良)事件系统源码 医院不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
医疗安全不容忽视! 医疗不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
20 1
采用PHP开发的医院安全(不良)事件系统源码 医院不良事件有哪些?又该怎样分类呢?也许这篇文章能给予你答案。
|
7天前
|
监控 安全 PHP
采用PHP开发的不良事件管理系统源码vue2+element医院不良事件上报系统的意义 AEMS系统源码
不良事件管理系统(AEMS)是一种用于医疗行业的解决方案,它主要用于处理和管理临床不良事件。这些不良事件是指由医疗导致的伤害,与疾病的自然转归相反,可能延长病人的住院时间或导致残疾。AEMS的目标是揭示系统的不足与缺陷,减少不良事件对病人、家属、医护人员和医院声誉的影响。
26 1
|
7天前
|
安全 测试技术 PHP
掌握现代Web开发:PHP 8的新特性与最佳实践
【5月更文挑战第5天】 在当今快速发展的网络世界中,PHP作为一种流行的服务器端脚本语言,持续地演化着。最新的PHP 8版本引入了一系列令人兴奋的新特性和性能改进,为开发者提供了更加强大和灵活的工具。本文将深入探讨PHP 8中的新特性,包括联合类型、名称参数、匹配表达式等,并分享一些最佳实践,帮助开发者提高代码质量,优化性能,并确保安全性。通过这些实用技巧和示例,您将能够构建更高效、更安全的PHP应用程序。
|
7天前
|
编译器 API PHP
深入PHP扩展开发:打造高效自定义模块
【4月更文挑战第30天】 在追求性能优化和特定功能实现的道路上,PHP提供了一种强大机制——扩展。本文将引导读者通过编写一个简单的PHP扩展来探索扩展开发的世界。我们将涉及从环境搭建到代码实现,再到扩展的编译与加载的完整流程,确保读者能够理解并实践如何创建高效的自定义PHP模块。
|
7天前
|
SQL 安全 PHP
【PHP开发专栏】PHP预处理语句与安全性
【4月更文挑战第30天】PHP预处理语句提升Web开发安全与性能。本文分三部分介绍原理、使用方法及安全性。预处理语句防止SQL注入,提高代码可维护性和性能。创建预处理语句对象,绑定参数,执行并释放资源。通过占位符增强代码可读性,减少数据库负担,实现高效查询。
|
7天前
|
安全 PHP
【PHP开发专栏】PHP文件上传与下载实现
【4月更文挑战第30天】本文介绍了在PHP中实现文件上传和下载的详细步骤。文件上传通过`$_FILES`全局数组处理,包括设置HTML表单、PHP脚本处理上传及安全性考虑。文件下载则可使用`readfile()`、`fpassthru()`或`file_get_contents()`函数,同时关注安全问题,如防止目录遍历漏洞。文中还提供了一个简单的图片分享网站案例,演示了上传和下载功能的集成。
|
7天前
|
PHP 数据安全/隐私保护
【PHP开发专栏】PHP魔术方法与对象操作
【4月更文挑战第30天】PHP 魔术方法是特殊方法,如`__construct`、`__get`等,在特定时刻自动调用,用于重写默认行为。本文分三部分介绍PHP魔术方法和对象操作:1) 魔术方法包括构造、析构、属性访问等,常用于控制访问权限、自动加载等;2) 对象操作涉及创建、访问属性和方法、克隆及序列化/反序列化;3) 案例展示如何在创建对象时设置默认值。