`
fengke86
  • 浏览: 18349 次
  • 来自: ...
社区版块
存档分类
最新评论

PHP教程smarty学习指南

阅读更多

 

一:smarty的程序设计部分

 

在smarty的模板设计部分我简单的把smarty在模板中的一些常用设置做了简单的介绍,这一节主要来介绍一下如何在smarty中开始我们程序设计。下载Smarty文件放到你们站点中。
index.php PHP代码:

<?php
/**
*
* @version $Id: index.php
* @package
* @author www.php100.com
* @action 显示实例程序
*/
include_once("./Smarty/Smarty.class.php"); //包含smarty类文件

$smarty = new Smarty(); //建立smarty实例对象$smarty
$smarty->templates("./templates"); //设置模板目录
$smarty->templates_c("./templates_c"); //设置编译目录
$smarty->cache("./cache"); //缓存目录
$smarty->cache_lifetime = 0; //缓存时间
$smarty->caching = true; //缓存方式

$smarty->left_delimiter = "{#";
$smarty->right_delimiter = "#}";
$smarty->assign("name", "zaocha"); //进行模板变量替换
$smarty->display("index.htm"); //编译并显示位于./templates下的index.htm模板
?>

二:解释smarty的程序

我们可以看到,smarty的程序部分实际就是符合php语言规范的一组代码,我们依次来解释一下:

 

1:/**/语句:

包含的部分为程序篇头注释。主要的内容应该为对程序的作用,版权与作者及编写时间做一个简单的介绍,这在smarty中不是必需的,但从程序的风格来讲,这是一个好的风格。

 

2:include_once语句:

它将安装到网站的smarty文件包含到当前文件中,注意包含的路径一定要写正确。

 

3:$smarty = new Smarty():

这一句新建一个Smarty对象$smarty,简单的一个对象的实例化。

 

4:$smarty->templates(""):

这一句指明$smarty对象使用tpl模板时的路径,它是一个目录,在没有这一句时,Smarty默认的模板路径为当前目录的templates目录,实际在写程序时,我们要将这一句写明,这也是一种好的程序风格。

 

5:$smarty->templates_c(""):

这一句指明$smarty对象进行编译时的目录。在模板设计篇我们已经知道Smarty是一种编译型模板语言,而这个目录,就是它编译模板的目录,要注意,如果站点位于linux服务器上,请确保

teamplates_c里定义的这个目录具有可写可读权限,默认情况下它的编译目录是当前目录下的templates_c,出于同样的理由我们将其明确的写出来。

 

6:$smarty->left_delimiter与$smarty->right_delimiter:

指明在查找模板变量时的左右分割符。默认情况下为"{"与"}",但在实际中因为我们要在模板中使用<script>,Script中的函数定义难免会使用{},虽然它有自己的解决办法,但习惯上我们将它重新定义

为"{#"与"#}"或是"<!--{"与"}-->"或其它标志符,注意,如果在这里定义了左右分割符后,在模板文件中相应的要使每一个变量使用与定义相同的符号,例如在这里指定为"<{"与"}>",htm模板中也要

相应的将{$name}变成<{$name}>,这样程序才可以正确的找到模板变量。

 

7:$smarty->cache("./cache"):

告诉Smarty输出的模板文件缓存的位置。上一篇我们知道Smarty最大的优点在于它可以缓存,这里就是设置缓存的目录。默认情况下为当前目录下的cache目录,与templates_c目录相当,在linux系统中

我们要确保它的可读可写性。

 

8: $smarty->cache_lifetime = 60 * 60 * 24:

这里将以秒为单位进行计算缓存有效的时间。第一次缓存时间到期时当Smarty的caching变量设置为true时缓存将被重建。当它的取值为-1时表示建立起的缓存从不过期,为0时表示在程序每次执行时缓

存总是被重新建立。上面的设置表示将cache_lifetime设置为一天。

 

9: $smarty->caching = 1:

这个属性告诉Smarty是否要进行缓存以及缓存的方式。它可以取3个值,0:Smarty默认值,表示不对模板进行缓存;1:表示Smarty将使用当前定义的cache_lifetime来决定是否结束cache;2:表示

Smarty将使用在cache被建立时使用cache_lifetime这个值。习惯上使用true与false来表示是否进行缓存。

 

10:$smarty->assign("name", "zaocha"):

该数的原型为assign(string varname, mixed var),varname为模板中使用的模板变量,var指出要将模板变量替换的变量名;其第二种原形为assign(mixed var),我们要在后面的例子详细的讲解这个成员函数的使用方法,assign是Smarty的核心函数之一,所有对模板变量的替换都要使用它。

 

11. $smarty->display("index.tpl"):

该函数原形为display(string varname),作用为显示一个模板。简单的讲,它将分析处理过的模板显示出来,这里的模板文件不用加路径,只要使用一个文件名就可以了,它路径我们已经在$smarty->templates(string path)中定义过了。

程序执行完后我们可以打开当前目录下的templates_c与cache目录,就会发现在下边多出一些%%的目录,这些目录就是Smarty的编译与缓存目录,它由程序自动生成,不要直接对这些生成的文件进行修改。

以上我简单的把Smarty程序中的一些常用的基本元素介绍了一下,在后边的例子中你可以看到将它们将被多次的使用。

 

三:模板说明

接下来介绍一个section循环块与foreach循环块,本来它应该属于模板部分,但是由于它们是smarty的精华所在,而且与smarty程序设计部分联系非常紧密,所以就在本节单独拿出来讲一下。

 

1: foreach:用于循环简单数组,它是一个选择性的section循环,它的定义格式为:

{foreach from=$array item=array_id}
{foreachelse}
{/foreach}

其中,from 指出要循环的数组变量,item为要循环的变量名称,循环次数由from所指定的数组变量的个数所决定。{foreachelse}用来当程序中传递过来的数组为空时的处理,下面是一个简单的例子:

模板文件:example.htm

foreach 输出一个“二维关联数组”的数据:

{#foreach item=new from=$news#}

新闻编号:{#$new.id#}

新闻内容:{#$new.title#}

{#foreachelse#}

数据库中没有新闻输出!

{#/foreach#}

{foreach from=$newsArray item=newsID}

新闻编号:{$newsID}

新闻内容:{$newsTitle}

{foreachelse}

对不起,数据库中没有新闻输出!

{/foreach}

这是一个错误的不显示数据,本文做了更正。

 

程序文件:example.php

<?
/*********************************************
*
* 文件名: example.php
* 作 用: 显示实例程序2
*********************************************/

include_once("./Smarty/Smarty.class.php");

$smarty = new Smarty();

$smarty->templates("./templates");

$smarty->templates_c("./templates_c");

$smarty->cache("./cache");

$smarty->cache_lifetime = 0;

$smarty->caching = true;

$smarty->left_delimiter = "{#";

$smarty->right_delimiter = "#}";

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻");

$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻");

$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻");

$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻");

$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻");

$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻");

//这是一个二维关联数组

$smarty->assign("newsArray", $array);

//编译并显示位于./templates下的index.htm模板

$smarty->display("example.htm");

?>

输入结果:example.php

这里将输出一个数组:

新闻编号:1

新闻内容:第1条新闻

新闻编号:2

新闻内容:第2条新闻

新闻编号:3

新闻内容:第3条新闻

新闻编号:4

新闻内容:第4条新闻

新闻编号:5

新闻内容:第5条新闻

新闻编号:6

新闻内容:第6条新闻

foreach还可以用foreachelse来匹配,用foreachelse来表示当传递给foreach的数组为空值时程序要执行的操作,具体的使用方法,请参考手册的说明。

 

 

 

 

2. section:

section的产生是为解决foreach的不足的,与foreach一样,它用于设计模板内的循环块,它较为复杂,可极大程序上满足程序需要,所以在程序中我习惯使用它而不使用foreach,基本原形为:

{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}

name: section的名称,不用加$

$loop: 要循环的变量,在程序中要使用assign对这个变量进行操作。

$start: 开始循环的下标,循环下标默认由0开始

$step: 每次循环时下标的增数

$max: 最大循环下标

$show: boolean类型,决定是否对这个块进行显示,默认为true

这里有个名词需要说明:

循环下标:实际它的英文名称为index,是索引的意思,这里我将它译成"下标",主要是为了好理解。它表示在显示这个循环块时当前的循环索引,默认从0开始,受$start的影响,如果将$start设为5,它也将从5开始计数,在模板设计部分我们使用过它,这是当前{section}的一个属性,调用方式为Smarty.section.sectionName.index,这里的sectionName指的是函数原型中的name属性。

 

{section}块具有的属性值,分别为:

1. index: 上边我们介绍的"循环下标",默认为0

 

2. index_prev: 当前下标的前一个值,默认为-1

 

3. index_next: 当前下标的下一个值,默认为1

 

4. first: 是否为第一下循环

 

5. last: 是否为最后一个循环

 

6. iteration: 循环次数

 

7. rownum: 当前的行号,iteration的另一个别名

 

8. loop: 最后一个循环号,可用在section块后统计section的循环次数

 

9. total: 循环次数,可用在section块后统计循环次数

 

10. show: 在函数的声明中有它,用于判断section是否显示

它们的具体属性大家可以参考手册,在程序中可灵活使用它的这些属性,模板部分我就使用过index属性,大家可以回过头去看看。

 

同样,{section}也可以配合使用{sectionelse},用来表示传入的数组变量为空时对模板进行的处理。

我们把上边的那个例子使用{section}来替代{foreach}来实现现样的功能,注意,在这个例子中我只将tpl模板中的{foreach}用{section}来实现,php程序文件中没有任何改动,同时加了{sectionelse}处理块:

example.tpl

 

这里将输出一个数组:

{section name=loop loop=$News}
新闻编号:{$News[loop].newsID}
新闻标题:{$News[loop].newsTitle}
{sectionelse}
对不起,没有任何新闻输入!
{/section}

 

example.php

<?
/*********************************************

*

* 文件名: example7.php

* 作 用: 显示实例程序2

*********************************************/

include_once("./comm/Smarty.class.php");

$smarty = new Smarty();

$smarty->templates("./templates");

$smarty->templates_c("./templates_c");

$smarty->cache("./cache");

$smarty->cache_lifetime = 0;

$smarty->caching = true;

$smarty->left_delimiter = "{";

$smarty->right_delimiter = "}";

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻");

$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻");

$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻");

$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻");

$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻");

$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻");

$smarty->assign("newsArray", $array);

//编译并显示位于./templates下的index.tpl模板

$smarty->display("example.tpl");

?>

 

example.php 输出文件

这里将输出一个数组:

新闻编号:1

新闻内容:第1条新闻

新闻编号:2

新闻内容:第2条新闻

新闻编号:3

新闻内容:第3条新闻

新闻编号:4

新闻内容:第4条新闻

新闻编号:5

新闻内容:第5条新闻

新闻编号:6

新闻内容:第6条新闻

 

这里的{section}块的对于变量的命名方式感觉有些别扭,不过没关系,你只要记住模板变量使用:

$loopName[name].var这种模式就行了,loopName为loop处赋予的变量名,[name]为name处赋予的字符串,.后为为你要在程序数组中设定要与值相对应的下标名称就行了。

 

好了,smarty学习指南---程序设计篇就写到这里,对于一般的应用,这些知识已经够用了,其它的一些高级技巧大家请参看手册中的例子,下一节将讲讲Smarty在实际应用中的例子,将分别以php内置的mysql语句,phplib中的DB类,ADODB,Pear中DB类来分别讲一下各个类库在同一个例子中的实现。

分享到:
评论

相关推荐

    smarty包及学习资料

    在描述中提到的"PHP开发实战1200例"这本书,是一本全面覆盖PHP开发的实用指南,很可能包含了如何集成和使用Smarty的章节。这本书可能涵盖了基础到高级的PHP技巧,包括数据库操作、Web服务、安全性、性能优化等,并...

    php4、php5帮助文档及smarty帮助文档

    "smarty中文手册"提供了如何创建、配置和使用Smarty模板的详细指南,包括模板变量、控制结构、函数、插件和缓存机制等。 通过这些文档,开发者不仅可以学习到PHP的基础知识,还能深入理解PHP4和PHP5之间的差异,...

    linux+php+smarty模板的例子.zip

    `PHP Web Development in Linux环境中配置(Smarty).txt`可能包含了具体的配置和操作指南,而`Linux环境中Smarty模板引擎配置 - L_PHPer的专栏 - 博客频道 - CSDN.NET.url`则指向了一篇可能有关于在Linux环境下配置...

    smarty实例详细教程(经典)

    ### Smarty 实例详细教程知识点梳理 #### 一、Smarty 概述 - **定义**: Smarty 是一款使用 PHP 编写的模板引擎,其主要目的是实现逻辑与表现层的完全分离,以便于开发人员与设计师能够独立工作,互不影响。 - **...

    菜鸟学PHP之Smarty入门(组图)

    本文旨在为初学者提供一份入门指南,通过解析Smarty的基本概念、安装步骤以及应用场景,帮助你快速掌握这一强大的模板引擎。 #### 模板引擎的诞生背景与优势 模板引擎的出现源于对传统内嵌ServerScript(如ASP、...

    php和smarty3开发文档

    1. **安装与配置**:指导如何在现有PHP项目中集成Smarty3,包括设置目录结构、配置文件和加载必要的类库。 2. **模板语法**:讲解Smarty3的模板标记,如`{foreach}`用于循环,`{if}`、`{else}`、`{elseif}`进行条件...

    smarty 教程大集合

    本教程大集合包含两个重要的资源:《smarty大师兄教程.chm》和《smarty.chm》的开发帮助文档,都是关于Smarty学习的宝贵资料。 《smarty大师兄教程.chm》可能是由一位经验丰富的开发者编写的,通常这类教程会深入浅...

    php smarty框架

    9. **开发文档和示例**:Smarty提供详尽的开发文档,包括安装指南、教程、API参考等,帮助开发者快速上手。此外,示例代码可以帮助理解如何实际应用这些功能。 在"php Smarty2.6"这个压缩包中,可能包含以下内容: ...

    计算机后端-整套PHP视频教程.配套工具Smarty-3.1.4.7z

    描述中的内容与标题一致,表明这是一个完整的PHP视频教程,可能涵盖了从基础到进阶的各个主题,并且包括Smarty 3.1.4版本的使用教程或资源,这对于希望学习或提升PHP后端开发技能的人员非常有价值。 标签进一步细化...

    大师兄Smarty教程

    Smarty是一个在PHP编程环境中广泛使用的模板引擎,它将业务逻辑与视图设计分离,使得开发者可以...通过“大师兄Smarty教程”提供的详细指导,你将能够熟练地将Smarty应用到实际的PHP项目中,提升开发效率和代码质量。

    php和smarty中文chm手册

    《PHP和Smarty中文CHM手册》是一份宝贵的资源,它为开发者提供了详尽的PHP和Smarty框架的中文指南。PHP是一种广泛使用的开源脚本语言,尤其适用于Web开发,而Smarty则是一个流行的PHP模板引擎,旨在将业务逻辑与显示...

    smarty最新手册 smarty中英文结合版

    Smarty是一个流行的PHP模板引擎,它将业务逻辑与...总之,Smarty是PHP开发中的得力助手,通过本手册的学习,开发者能够熟练掌握其用法,提升项目开发的效率和质量。无论是初学者还是经验丰富的开发者,都能从中受益。

    PHP中文手册+Smarty中文手册

    Smarty中文手册提供了关于如何使用Smarty的详细教程和API文档,包括模板语法、配置选项、模板函数等,是学习和使用Smarty的必备资料。通过阅读这个手册,开发者可以更深入地理解如何利用Smarty提升PHP项目的开发效率...

    smarty开发手册html版本

    这个“smarty开发手册html版本”提供了一个详尽的指南,帮助开发者理解和掌握Smarty的使用方法。 一、Smarty简介 Smarty是一个独立于PHP的模板系统,它允许开发者使用HTML作为模板语言,而将PHP代码隐藏在后台处理...

    smarty中文及英文手册

    这个压缩包包含了三本关于Smarty的详细手册,分别是Smarty完全中文手册、smarty_manual_zh(可能是简体中文版手册)以及smarty.CHM,这三份文档为学习和理解Smarty提供了全面的指南。 Smarty中文手册通常会包含以下...

    Smarty+smarty中文手册

    `smarty中文手册.chm`是一个包含Smarty使用指南的中文帮助文件。CHM(Compiled Help Manual)是Microsoft开发的一种帮助文件格式,通常用于Windows平台,它将HTML文档集合在一起并编译为单个可搜索的文件,方便用户...

    Smarty-v3.1.4

    Smarty是PHP世界中的一款著名模板引擎,它的主要目标是将应用程序的逻辑与界面设计分离开来,让开发者专注于代码编写,而设计师可以独立地进行页面布局和设计,从而提高开发效率和代码可维护性。Smarty v3.1.4 是这...

    Smarty-3.1.16

    - 开发者应先了解基本的PHP知识,然后学习Smarty的官方文档,理解其核心概念和语法。 - 通过实际项目实践,可以更好地掌握Smarty的用法,如设置配置、创建模板、处理数据等。 - 阅读`Readme-说明.htm`文件,可以...

Global site tag (gtag.js) - Google Analytics