搜索
首页后端开发php教程模板,PHPLIB处理方式_PHP
模板,PHPLIB处理方式_PHPJun 01, 2016 pm 12:34 PM
使用变量处理方式模板

  如果你正想知道什么是模板,首先去看一下Sascha Schumann写的精彩文章《模板-为什么和如何在PHP3中使用它们(Templates - why and how to use them in PHP3)的前几段。

   一般来说,模板可以让你完全地把你的PHP代码从HTML中分离出来,这样使得HTML的图形设计者们非常高兴,而且可以避免他们搞丢你的宝贵设计。

  它不是FastTemplates那么,我们真的需要在PHPBuilder上关于模板的另一篇文章吗?好,是的,因为有不止一种的方法用PHP来实现模板。Sascha的文章讲述了如何使用FastTEmplates,但是PHP基本类库("PHPLIB")有它自已的模板实现。

  它们有什么不同呢?FastTemplates最初是从一个Perl库转变来的。FastTemplates对Perl程序工作的很好,但是对PHP不太理想。Kristian Koehntopp从头编写了PHPLIB模板,作为一个纯的PHP库,它更好地提供了PHP的优势。好处之一是Kristian的设计使用了preg_replace()来分析模板,据说比FastTemplate 中使用的ereg_replace()要快。PHPLIB模板的另一个好处是它允许动态的块实现嵌套,不象FastTemplates。

  两个库都有着非常相似的特性和能力,但是如果你已经使用了FastTemplates,并且你想学习使用PHPLIB模板,你应该把你所知道的关于FastTemplates 的一切都忘掉。他们的特性可能是相似的,但是PHPLIB模板所做的每件事比FastTemplates只有一点点不同。

使用PHPLIB模板
  让我们从一个简单的例子开始。我们假设在/home/mydir/mytemplates/下面有一个名为MyTemplate的模板,它有一些文本,内容可能是:

祝贺!你赢了一辆{ some_color}Honda Prelude!

  注意"{ some_color}"是用大括号包围的。大括号指明some_color是一个模板变量。我们可能想写这样一个脚本,它可以装入模板,在{ some_color}模板变量的地方插入PHP变量$my_color的值,然后输出新的文本。
如果$my_color碰巧被设为"蓝色",最后的输出可能是:

祝贺!你赢了一辆新蓝色Honda Prelude!

  下面是上述结果的PHP脚本:

---------------------------------------

include "template.inc";

$my_color = "blue";
// 将在后面使用

$t = new Template("/home/mydir/mytemplates/");
// 创建一个名为 $t 的模板对象

$t->set_file("MyFileHandle","MyTemplate.ihtml");
// 设置 MyFileHandle = 我们的模板文件

$t->set_var("some_color",$my_color);
// 设置模板变量 some_color = $my_color值

$t->parse("MyOutput","MyFileHandle");
// 设置模板变量 MyOutput = 分析后的文件

$t->p("MyOutput");
// 输出 MyOutput 的值(我们的分析后的数据)

?>-------------------------------------------
  第一行是一个include 指令,用来提供PHPLIB模板功能。当然PHPLIB做的比模板要多,但是如果你只想使用模板特性,只需要包括tmplate.inc (template.inc是来自于PHPLIB的文件之一)。PHPLIB模板使用面向对象程序设计,所以下一件事情就是创建一个模板对象。代码 $t = new Template (
"/home/mydir/mytemplates/" ); ?> 创建一个新的模板对象$t。这个$t对象是一个句柄,将用来处理所有的模板函数,用于PHP脚本中其它的代码。如果你愿意,你可能创建其它的模板对象(每一个都有着自已的模板变量名字空间),但是一个就够用了。在模板的构造函数调用中的路径("/home/mydir/mytemplates/")用来设置你的模板所在位置的根目录,但是如果你没有设它,它将缺省与你的PHP脚本所在目录一样。

  然后我们调用set_file()来定义一个名为"MyFileHandle"的句柄来与MyTemplate.ihtml链接(在parse()被调用之前,模板不会真正地装入)。顺便说一下,PHPLIB模板的模板文件名的后缀为.ihtml 是一种习惯,你可以使用.html,.tpl,或其它的后缀。然后调用set_var()来设置模板变量some_color为$my_color的值(值为"蓝色"),意味着所有在模板中出现{ some_color}的地方都将被词"蓝色"所替换,一旦我们调用了parse()。

  接着我们调用parse(),它会装入MyFileHandle(MyTemplate.ihtml)进行分析,并且替换所有模板变量("{ 某变量}")为模板变量的值,分析的结果放在MyOutput中。任何结果都不会输出到web服务器上,除非p("MyOutput")被调用,它将输出最后分析过的文本。

  

嵌套的模板
  parse()函数的一个灵巧的特性是它创建的MyOutput句柄是一个真正的模板变量,就象some_color 是一个模板变量。所以如果你有另一个模板,它有一个{ MyOutput}标签,当你分析第二个模板时,所有的{ MyOutput}标记将被替换为MyOutput中的分析后的文本。这个特性允许你将一个模板文件嵌入到另一个模板中。所以,我们可能有另一个名为wholePage.ihtml的模板,内容如下:

对不起,你没赢。但是如果你赢了,我们将对你说:{ MyOutput}

  并且在wholePage.ihtml被分析后,最后的结果将是:

对不起,你没赢。但是如果你赢了,我们将对你说:祝贺!你赢了一辆新蓝色Honda Prelude!

  下面是分析两个模板的PHP代码:

-------------------------------------------------------

$t = new Template("/home/mydir/mytemplates/");

// 这三行同第一个例子一样$t->set_file("MyFileHandle","MyTemplate.ihtml");
$t->set_var("some_color",$my_color);
$t->parse("MyOutput","MyFileHandle");

// 注意我们没有调用p()// 这里,仍然没有输出任何东西

// 现在分析第二个模板
$t->set_file("WholeHandle","wholePage.ihtml");

// wholePage.ihtml 有 "{ MyOutput}" 在里面$t->parse("MyFinalOutput","WholeHandle");

// 所有的 { MyOutput} 被替换了$t->p("MyFinalOutput");
// 输出 MyFinalOutput 的值

?>---------------------------------------------------
  最后调用了parse()和p()的两行语句可以合并成一个简写函数pparse():

-------------------------------------------------
pparse("MyFinalOutput","SecondHandle");
?>
-------------------------------------------------
  另一个PHPLIB模板的特性是set_file()和set_var()函数也能一次接收多组值,通过传递一个句柄/数组对数组。这是一个例子:


-----------------------------------------
$t->set_file(array( "pageOneHandle" => "pageone.ihtml",
"pageTwoHandle" => "pagetwo.ihtml"));
$t->set_var(array( "last_name" => "Gates",
"first_name" => "Bill",
"net_worth" => $reallybignumber));
?>
-----------------------------------
添加模板文本
  你可以给parse()和pparse()传递第三个参数,如果你想给模板变量追加数据而不是替换它。可以简单的使用true作为第三个参数调用parse()和pparse(),如:


--------------------------------------------
$t->parse("MyOutput","MyFileHandle", true);
?>
-----------------------------------------------------
  如果MyOutput已经包含了数据,MyFileHandle将被分析并且被追加到MyOutput已经存在的数据上。这个技术非常有用,如果你已经有了一个模板,你想要同一段文本被重复多次,例如列出一个数据库查询结果中的多行。你也可能是显示数组中的变量,如下面的例子:


---------------------------------------------
set_file(array("mainpage" => "mainpage.ihtml", "each_element" => "each_element.ihtml"));reset($myArray);while (list($elementName, $elementValue) = each($myArray)) {
// 设置 'value' 和 'name' 为每一个元素的值和名字
$t->set_var("name",$elementName); $t->set_var("value",$elementValue);
// 追加each_element的拷贝
$t->parse("array_elements","each_element",true);}$t->pparse("output","mainpage");?>--------------------------------------
  这个例子使用了两个模板,mainpage.ihtml和each_element.ihtml。mainpage.ihtml模板可能是这样:


Here is the array:


{ array_elements}


  上面的{ array_elements}标签将被each_element.ihtml的拷贝所替换,它将根据数组($myArray)进行重复。each_element.ihtml模板看上去可能是:


{ name}: { value}

  处理结果是一个包含$myArray元素的格式化很好的表格。但是如果将两个模板合并成一个模板不是更好吗?实际上,它们可以使用模板块来合并使用。模板块允许从一个模板中取出一块文本,所以你可以重复很多次,或者在它上面做任何你想做的事情。但是我将在另一篇文章讲述这个特性。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用PHP处理PDF文件的方法使用PHP处理PDF文件的方法Jun 19, 2023 pm 02:41 PM

PDF文件作为一种通用的文件格式,被广泛应用于各种应用场景,如电子书、报表、合同等等。在开发过程中,我们常常需要对PDF文件进行生成、编辑、读取等操作。而PHP作为一种脚本语言,也能够轻松地完成这些任务。本文将介绍使用PHP处理PDF文件的方法。一、生成PDF文件生成PDF文件有许多方法,其中最常见的是使用PDF库。PDF库是一种生成PDF文档的工具,它为

CakePHP如何处理文件上传?CakePHP如何处理文件上传?Jun 04, 2023 pm 07:21 PM

CakePHP是一个开源的Web应用程序框架,它基于PHP语言构建,可以简化Web应用程序的开发过程。在CakePHP中,处理文件上传是一个常见的需求,无论是上传头像、图片还是文档,都需要在程序中实现相应的功能。本文将介绍CakePHP中如何处理文件上传的方法和一些注意事项。在Controller中处理上传文件在CakePHP中,上传文件的处理通常在Cont

CakePHP如何处理多语言?CakePHP如何处理多语言?Jun 06, 2023 am 08:03 AM

CakePHP是一个流行的PHP开发框架,它可以帮助开发者快速构建高质量的Web应用程序。随着全球化的发展,越来越多的应用需要支持多语言,CakePHP也提供了相应的支持。本文将介绍CakePHP如何处理多语言。一、多语言支持多语言支持是CakePHP的一项重要功能。从版本2.0开始,CakePHP支持gettext文件格式,该

PHP语言开发中如何检测和处理空值错误?PHP语言开发中如何检测和处理空值错误?Jun 11, 2023 am 10:51 AM

随着现代Web应用不断发展,PHP作为其中最流行的编程语言之一,被广泛地应用于网站开发中。但在开发过程中,经常会遇到空值错误,而这些错误会导致应用程序抛出异常,进而影响用户的使用体验。因此,在PHP开发过程中,如何检测和处理空值错误,是程序员们需要掌握的重要技能。一、什么是空值错误在PHP开发过程中,空值错误通常指的是两种情况:变量未初始化和变

如何构建基于Spring Boot的分布式事务处理如何构建基于Spring Boot的分布式事务处理Jun 23, 2023 am 09:24 AM

在企业级应用程序中,分布式系统已经成为一个常见的架构模型。分布式系统由多个处理单元(节点)组成,这些节点协同工作以完成复杂的任务。在分布式系统中,事务处理是一个必不可少的组件,因为它能够确保所有节点协同工作的结果一致性。本文将介绍如何构建基于SpringBoot的分布式事务处理。一、什么是分布式事务处理?在单节点系统中,事务处理通常是一个简单的过程。当应用

如何使用PHP进行Excel文件处理?如何使用PHP进行Excel文件处理?May 13, 2023 am 08:00 AM

随着Excel文件在商业领域和日常生活中的不断普及和应用,我们经常需要使用PHP处理Excel文件,例如数据的导入导出,数据的筛选和排序等。因此,本文将介绍如何使用PHP进行Excel文件处理。安装PHPExcel库PHPExcel是一款强大的PHP操作Excel文件的开源库,其支持读取、写入Excel文件,并提供了许多便捷的操作方法。在使用之前需要先安装P

Go 语言中的时间处理方式有哪些?Go 语言中的时间处理方式有哪些?Jun 10, 2023 pm 09:42 PM

Go语言作为一个现代化的编程语言,时间在开发中占有很重要的位置。Go语言提供了一些内置的时间函数和结构体,使得时间的处理变得更加便捷。在本篇文章中,将会介绍一些Go语言中常用的时间处理方式。time.Now()我们可以使用time.Now()函数获取当前的时间:now:=time.Now()fmt.Println(now)输出:2019-06-131

微服务架构中如何处理大量的异步任务?微服务架构中如何处理大量的异步任务?May 17, 2023 pm 10:01 PM

随着云计算和大数据时代的到来,解决并发问题已经成为了互联网架构设计的关键。而微服务架构作为云时代下的一种较为先进的架构方式,其本身的异步任务处理能力成为了其优势之一。但是,当异步任务数量急剧增加时,也会给微服务架构的性能和稳定性带来挑战。本文将从异步任务的定义、微服务架构的异步任务处理原理以及解决方案等方面进行探讨。一、异步任务的定义和类型异步任务,顾名思义

See all articles

热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.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),