php smarty 基础

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

什么是PHP模板?

该如何使我的PHP脚本从设计中独立出来?这无疑地是在PHP邮件列表上所提问的最多的问题之一。虽然PHP被标榜为“HTML嵌入式语言”,在写过许多PHP和HTML混合式的工程之后,我产生了一个分离表单和内容的想法。而且,在许多公司里规划设计者的角色和程序设计者是分开的。于是,这样的一个模板解决方案产生了……

例如在一个公司,一个应用程序的开发流程如下:在提交计划文档之后,界面设计者[美工]制作了网站的外观模型,然后把它交给后台程序员。程序员使用PHP 实现商业逻辑,同时使用外观模型做成基本架构。然后工程被返回到HTML页面设计者继续完善。就这样工程可能在后台程序员和页面设计者之间来来回回好几次。由于后台程序员不喜欢干预任何有关HTML标签,同时也不需要美工们和PHP代码混在一起;美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的模板支持就显得很重要了。

纵观现今存在的许多PHP模板解决方案(比如PHPLIB),大多数都只是提供了用模板取代变量和将动态区块的功能有限的格式化的基本方法。但是我们的需求比这个要高的多。我们完全不想要PHP程序员去设计HTML 页面,可是这又是不可避免的。例如:如果美工想要在动态区块之间交替不同的背景颜色,他就可能得和程序员预先说好。同样,美工们也应该有自己对于页面设计的配置文件,这同样可以通过变量把他们拉到模板里边去。

Smarty的诞生

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

我们可以想象Smarty应该有怎样的最后表现。我们知道PHP代码如果没有了模板解析的开销将有多快,我们也知道从一般的美工看来PHP语言是多么的“恐怖”,然而这一切可以被一种更简单的模板语法掩饰掉。我们应该怎样把这两种方法的长处结合起来?

于是,Smarty诞生了……

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的地方

1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,导致经常重新编译模板,所以这类型的程序使用Smarty会使模板处理速度变慢。

2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。

Smarty简明教程

一. 安装     
首先打开网页http://smarty.php.net/download.php,下载最新版本的Smarty。解压下载的文件(目录结构还蛮复杂的)。接下来演示给大家一个安装实例,看过应该会举一反三的。
    (1) 在根目录下建立了新的目录learn/,再在learn/里建立一个目录smarty/。将刚才解压缩出来的目录的libs/拷贝到smarty/里,再在smarty/里新建templates目录,templates里新建cache/,templates/,templates_c/, config/.

    (2) 新建一个模板文件:index.tpl,将此文件放在learn/smarty/templates/templates目录下,代码如下:
Copy code<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""

http://www.w3.org/TR/html4/loose.dtd">
          新建index.php,将此文件放在learn/下:
Copy code<?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;$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:
        Hello,{$exp.name}!Good {$exp.time}

        *.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中可以用到的比较。看看就能知道什么意思吧。

        示例:
        {if $name eq"Fred"}

        WelcomeSir.

        {elseif $name eq"Wilma"}

        WelcomeMa'am. 

       
        Welcome,whatever you are.

        {/if}
五. 循环       

在Smarty里使用循环遍历数组的方法是section,如何赋值遍历都是在模板中解决,php源文件中只要一个assign就能解决问题。       
示例:
{* this examplewill print out all the values of the $custid array *}

{sectionname=customer loop=$custid}

id: {$custid[customer]}<br>
{/section}
OUTPUT:
id: 1000<br>id: 1001<br>id: 1002<br>

六. 常见问题       
Smarty将所有大括号{}里的东西都视为自己的逻辑程序,于是我们在网页中想插入javascript函数就需要literal的帮忙了,literal的功能就是忽略大括号{}。       
示例:Copy code                <scriptlanguage=javascript>              function isblank(field) {                        if (field.value == '')                                { return false; }                        else                                {                                document.loginform.submit();                                return true;                                }              }        </script>{/literal}

时间: 2024-08-02 15:25:30

php smarty 基础的相关文章

smarty基础之拼接字符串的详解_php技巧

困扰大家的smarty问题又出现了,就是拼接字符串,其实很简单的,在很久以前,我们都是用古老的方法,就是<{assign var=? value=?}>然后再来实现字符串的拼接,其实有一个简单好用的方法就是"|cat:"<{foreach item=i from=$abc}>    <{foreach item=j from=$def}>          <img src="<{$i.floder|cat:130_|$j.pi

菜鸟学PHP之Smarty入门

    刚开始接触模版引擎的 PHP 设计师,听到 Smarty 时,都会觉得很难.其实笔者也不例外,碰都不敢碰一下.但是后来在剖析 XOOPS 的程序架构时,开始发现 Smarty 其实并不难.只要将 Smarty 基础功练好,在一般应用上就已经相当足够了.当然基础能打好,后面的进阶应用也就不用怕了. 这篇文章的主要用意并非要深入探讨 Smarty 的使用,这在官方使用说明中都已经写得很完整了.笔者仅在此写下一些自己使用上的心得,让想要了解 Smarty 却不得其门而入的朋友,可以从中得到一些

Smarty 入门

序言 刚开始接触样版引擎的 PHP 设计师,听到 Smarty 时,都会觉得很难.其实笔者也不例外,碰都不敢碰一下.但是后来在剖析 XOOPS 的程序架构时,开始发现 Smarty 其实并不难.只要将 Smarty 基础功练好,在一般应用上就已经相当足够了.当然基础能打好,后面的进阶应用也就不用怕了. 这篇文章的主要用意并非要深入探讨 Smarty 的使用,这在官方使用说明中都已经写得很完整了.笔者仅在此写下一些自己使用上的心得,让想要了解 Smarty 却不得其门而入的朋友,可以从中得到一些启

菜鸟学PHP之Smarty入门_php模板

刚开始接触模版引擎的 PHP 设计师,听到 Smarty 时,都会觉得很难.其实笔者也不例外,碰都不敢碰一下.但是后来在剖析 XOOPS 的程序架构时,开始发现 Smarty 其实并不难.只要将 Smarty 基础功练好,在一般应用上就已经相当足够了.当然基础能打好,后面的进阶应用也就不用怕了. 这篇文章的主要用意并非要深入探讨 Smarty 的使用,这在官方使用说明中都已经写得很完整了.笔者仅在此写下一些自己使用上的心得,让想要了解 Smarty 却不得其门而入的朋友,可以从中得到一些启示.就

smarty模板引擎基础知识入门_php实例

本文实例讲述了smarty模板引擎基础知识.分享给大家供大家参考.具体如下: 一.基本概念 1.什么是mvc? mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty? smarty是一个php的模板引擎.更明确的来说,它可以帮助开发者更好的分离程序逻辑和页面显示. 3.smarty运行原理 模板文件,就是一个显示数据的模板,其中需要显示的数据用占位符代替. smarty运行时,会读取模板文件,将模板文件中的占位符替换成真正的数据,并输出一个处理后

[PHP]模板引擎Smarty深入浅出介绍_php基础

Smarty介绍 什么是模版引擎 不知道从什么时候开始,有人开始对 HTML 内嵌入 Server Script 觉得不太满意.然而不论是微软的 ASP 或是开放源码的 PHP,都是属于内嵌 Server Script 的网页伺服端语言.因此也就有人想到,如果能把程序应用逻辑 (或称商业应用逻辑) 与网页呈现 (Layout) 逻辑分离的话,是不是会比较好呢? 其实这个问题早就存在已久,从交互式网页开始风行时,不论是 ASP 或是 PHP 的使用者都是身兼程序开发者与视觉设计师两种身份.可是通常

smarty实例教程_php基础

smarty实例教程(1) 一.什么是smarty? smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分 离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目 中显的尤为重要. 二.smarty优点: 1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的. 2. 编译型:采用smarty编写的程序在运行

smarty教程-smarty入门基础应用实例教程

采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的. */  代码如下 复制代码 $servername  = 'localhost'; $dbname='whois';//数据库教程名称,需修改为您当前使用的库名称 $tbname='post';//数据表名称,不用修改 $name='root';//数据库用户名,需修改 $password='xxxxxxx';//数据库链接密码,需修改 require_once 'smarty/libs/Smarty.c

给php新手谈谈我的学习心得_php基础

明天开始期末考试,接着后天就要回福州了,由于家里还没装网络,因此,得有一段时间不能来论坛了,在这之前,我想了下,我给新手解答过问题,演示过代码,好像没谈过自己的学习心得,临走之前,我就来谈谈我学习PHP的心得,虽然是老生长谈,但是我想我的情况还是具有代表性的,希望各位想加入PHPER队伍的新生力量能有所帮助.     大家学习PHP大部分都靠自学,我也不例外,不乏和我一样过去是做ASP的,刚看到PHP代码,我就感到奇怪,怎么里面这么多$啊?好奇怪啊,潜意识我觉得这东西肯定比ASP难多了,可是当我