Table of Contents
这是一个使用模板的测试文件!
{PAGETITLE}
Home php教程 php手册 PHP-Web应用程序开发:使用模板

PHP-Web应用程序开发:使用模板

Jun 21, 2016 am 09:10 AM
gt lt quot template

web|程序|模板

每个进行过较大型的PHP-Web应用程序设计的开发人员大概都有如下的经历:花大量的时间写超文本语句,为页面排版,兼作美工等;或在整合的程序代码在和HTML静态页面时花费大量的时间。的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥。为了解决这个问题,PHP也提供了自己的解决方案,有多种,本文主要介绍PHPLIB中的Template类。

1 模板处理类的设计
模板处理类主要需完成以下的任务:
·从模板文件中读取显示用的HTML代码。
·将模板文件和实际生成的数据结合,生成输出的结果。
·允许同时处理多个模板。
·允许模板的嵌套。
·允许对模板中的某个单独的部分进行处理。

归纳上述任务,模板类的设计目标为:从多个模板文件中读入显示的HTML代码,将这些显示代码中需要动态数据的地方替换为PHP程序运算所得出的数据,然后按照一定的顺序输出。其中,替换的部分可以自由的设定。

读取显示用的HTML代码采用读文件的方式
模板文件和数据的结合采用正则替换
处理多个模板用数组存储来实现。
模板的嵌套的实现主要的想法是:将模板和输出(任何中间的分析结果)一视同仁,都可拿来做替换,即可实现。
单独部分的处理的通过在模板文件中设定标注,然后在正则替换中结合标注来控制,实现部分替换。

2 模板处理类的实现
请参看PHPLib中的Template.inc,总共345行代码,有详细的注释。以下列举一些主要的函数,供研读参考:
1) function set_file($handle,$filename=” ”) line 77, 读取文件
2) function set_var($varname, $value = "") line 119, 设置映射数据-替换变量
3) function set_block($parent, $handle, $name = "") line 96, 设置标注
4) function subst($handle) line 136, 执行数据替换
5) function parse($target, $handle, $append = false) line 165, 执行模板文件与数据的结合
6) function p($varname) line 268, 输出处理结果
注:本人下载的php-lib7.2c的Template.inc文件中的第95行少了个“/”,加上后使用正常。

3 模板处理类的使用
3.1 最基本的例子
为了简单起见,这里假设模板文件、使用模板的PHP文件和模板处理类的文件都放在同一个目录下。PHPLIB中的习惯是使用ihtml后缀为模板文件的后缀。
下面是要使用的模板文件:




使用模板的测试


这是一个使用模板的测试文件!


当前的时间是{currenttime}!


注:模板文件和通常的HTML文件差不多,唯一不同的是使用“{}”括起来的是可以被模板处理类替换的动态内容的变量。

接下来使用模板处理类来处理上面的模板:

//引入Template类
include("template.inc");

//得到需要替换的数据
$timeNow=date("Y-m-d H:i:s",time());

//实例化一个Template类
$template= new Template();

//载入test.ihtml模板
$template->set_file("handle1","test.ihtml");

//使用$timeNow的值替换模板中的currenttime
$template->set_var("currenttime",$timeNow);

//进行实际的模板操作
$template->parse("output","handle1");

//输出最后结果
$template->p("output");
?>

注:如果只想用PHPLIB中的模板类,只需在文件头包含Template.inc类即可。
创建Template对象时,可以指定模板文件路径,如:new Template(“/htdocs/apps/templates/”),缺省为当前路径。

3.2 模板嵌套与块设定
下面这个例子来自与PHPLIB的参考手册,综合性较强,这里需说明的一点是设定块的目的与嵌套无关,但这个范例包含了两者。请仔细阅读,块设定是为了避免这种情况:原本可在一个模板文件(静态页面)里完成的内容,因需要部分循环,而将部分循环内容提取单独做成模板文件。请思考,如果不用块设定,这个例子是不是需要3个模板文件呢?
模板文件1,page.ihtml

{PAGETITLE}









{PAGETITLE}

{OUT} Content




模板文件2,box.ihtml










{TITLE}
{NUM} {BIGNUM}



模板处理文件,test.php
//引入Template类
include("template.inc");

#实例化一个Template类,名字叫$t
$t = new Template();

# 建立包含模板文件的数组
$t->set_file(array(
"page" => "page.ihtml",
"box" => "box.ihtml"));

# 载入模板文件box中的一个块row,引用名称为rows
$t->set_block("box", "row", "rows");

# 设置替换
$t->set_var(array("TITLE" => "Testpage",
"PAGETITLE" => "hugo"));

# 生成数据NUM,BIGNUM
for ($i=1; $i$n = $i;
$nn = $i*10;
#设置替换
$t->set_var(array("NUM" => $n, "BIGNUM" => $nn));
#进行分析,分析的结果添加到rows的后面
$t->parse("rows", "row", true);
}

# 生成box,再生成page
$t->parse("OUT", array("box", "page"));

# 输出最后结果
$t->p("OUT");
?>

注:这里page.ihtml模板文件中变量的命名与最后的输出句柄都用了“OUT”。
循环取值部分采用数据库类,即可将数据的生成与数据库应用结合起来。
执行结果如下图:



模板嵌套与块设定执行结果图

4 小结
本文主要简要介绍了PHPLIB中Template类的设计、实现及使用方法。当然,还有许多其他的PHP模板方案,如由Perl中演化而来的FastTemplates。目前Internet小组采用的是另一种方案,主要的实现方式是模板文件入库,采用eval来实现数据与模板文件的结合等,相对来说模板文件的管理与模板处理的使用比较简洁,但缺少文件存放的模式。本人目前在做的一些尝试是将两者结合起来,并想在PHPLIB的Template类的基础上进行改进。初步的目标任务有两个:1、在读取模板文件时扩展其对数据库的支持,这样可以在必要时增强灵活性与使用数据库管理工具 2、化简模板文件与数据的结合,因为在实际使用中大多数情况下无需将模板文件中的变量在处理程序中再设置(数据变量映射)一遍。
在此也希望读者、PHP程序爱好者一起参与进来,多提宝贵意见,祝好运!



Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the differences between Huawei GT3 Pro and GT4? What are the differences between Huawei GT3 Pro and GT4? Dec 29, 2023 pm 02:27 PM

Many users will choose the Huawei brand when choosing smart watches. Among them, Huawei GT3pro and GT4 are very popular choices. Many users are curious about the difference between Huawei GT3pro and GT4. Let’s introduce the two to you. . What are the differences between Huawei GT3pro and GT4? 1. Appearance GT4: 46mm and 41mm, the material is glass mirror + stainless steel body + high-resolution fiber back shell. GT3pro: 46.6mm and 42.9mm, the material is sapphire glass + titanium body/ceramic body + ceramic back shell 2. Healthy GT4: Using the latest Huawei Truseen5.5+ algorithm, the results will be more accurate. GT3pro: Added ECG electrocardiogram and blood vessel and safety

Fix: Snipping tool not working in Windows 11 Fix: Snipping tool not working in Windows 11 Aug 24, 2023 am 09:48 AM

Why Snipping Tool Not Working on Windows 11 Understanding the root cause of the problem can help find the right solution. Here are the top reasons why the Snipping Tool might not be working properly: Focus Assistant is On: This prevents the Snipping Tool from opening. Corrupted application: If the snipping tool crashes on launch, it might be corrupted. Outdated graphics drivers: Incompatible drivers may interfere with the snipping tool. Interference from other applications: Other running applications may conflict with the Snipping Tool. Certificate has expired: An error during the upgrade process may cause this issu simple solution. These are suitable for most users and do not require any special technical knowledge. 1. Update Windows and Microsoft Store apps

How to Fix Can't Connect to App Store Error on iPhone How to Fix Can't Connect to App Store Error on iPhone Jul 29, 2023 am 08:22 AM

Part 1: Initial Troubleshooting Steps Checking Apple’s System Status: Before delving into complex solutions, let’s start with the basics. The problem may not lie with your device; Apple's servers may be down. Visit Apple's System Status page to see if the AppStore is working properly. If there's a problem, all you can do is wait for Apple to fix it. Check your internet connection: Make sure you have a stable internet connection as the "Unable to connect to AppStore" issue can sometimes be attributed to a poor connection. Try switching between Wi-Fi and mobile data or resetting network settings (General > Reset > Reset Network Settings > Settings). Update your iOS version:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

How to solve 'undefined: template.Must' error in golang? How to solve 'undefined: template.Must' error in golang? Jun 24, 2023 pm 09:00 PM

Go language is an increasingly popular programming language with its concise syntax, efficient performance, and easy development. The Go language provides a powerful template engine - "text/template", but when using it, some people may encounter the "undefined:template.Must" error. The following is a method to solve this error. Import the correct package. When using the "text/template" template engine, you need to import "text/template

Golang and the Template package: creating personalized user interfaces Golang and the Template package: creating personalized user interfaces Jul 18, 2023 am 10:27 AM

Golang and Template package: Create personalized user interface In modern software development, the user interface is often the most direct way for users to interact with the software. In order to provide a user interface that is easy to use and beautiful, developers need flexible tools to create and customize the user interface. In Golang, developers can use the Template package to achieve this goal. This article will introduce the basic usage of Golang and Template packages, and show how to create a personalized user interface through code examples.

Data visualization through Golang's Template package Data visualization through Golang's Template package Jul 17, 2023 am 09:01 AM

Data visualization through Golang's Template package. With the advent of the big data era, data visualization has become one of the important means of information processing and analysis. Data visualization can present data in a concise and intuitive way, helping people better understand and analyze data. In Golang, we can use the Template package to implement data visualization functions. This article will introduce how to use Golang's Template package to achieve data visualization and provide code examples. GolangTem

Is watch4pro better or gt? Is watch4pro better or gt? Sep 26, 2023 pm 02:45 PM

Watch4pro and gt each have different features and applicable scenarios. If you focus on comprehensive functions, high performance and stylish appearance, and are willing to bear a higher price, then Watch 4 Pro may be more suitable. If you don’t have high functional requirements and pay more attention to battery life and reasonable price, then the GT series may be more suitable. The final choice should be decided based on personal needs, budget and preferences. It is recommended to carefully consider your own needs before purchasing and refer to the reviews and comparisons of various products to make a more informed choice.

See all articles