Table des matières
这是一个使用模板的测试文件!
{PAGETITLE}
Maison développement back-end tutoriel php PHP-Web应用程序开发:使用模板_PHP

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

Jun 01, 2016 pm 12:43 PM
template 处理 应用 数据 替换 模板 程序开发

程序开发

    每个进行过较大型的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程序爱好者一起参与进来,多提宝贵意见,祝好运!

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Open source! Au-delà de ZoeDepth ! DepthFM : estimation rapide et précise de la profondeur monoculaire ! Open source! Au-delà de ZoeDepth ! DepthFM : estimation rapide et précise de la profondeur monoculaire ! Apr 03, 2024 pm 12:04 PM

Open source! Au-delà de ZoeDepth ! DepthFM : estimation rapide et précise de la profondeur monoculaire !

Le processus de fonctionnement de l'hôte de service WIN10 occupant trop de CPU Le processus de fonctionnement de l'hôte de service WIN10 occupant trop de CPU Mar 27, 2024 pm 02:41 PM

Le processus de fonctionnement de l'hôte de service WIN10 occupant trop de CPU

Google est ravi : les performances de JAX surpassent Pytorch et TensorFlow ! Cela pourrait devenir le choix le plus rapide pour la formation à l'inférence GPU Google est ravi : les performances de JAX surpassent Pytorch et TensorFlow ! Cela pourrait devenir le choix le plus rapide pour la formation à l'inférence GPU Apr 01, 2024 pm 07:46 PM

Google est ravi : les performances de JAX surpassent Pytorch et TensorFlow ! Cela pourrait devenir le choix le plus rapide pour la formation à l'inférence GPU

La vitalité de la super intelligence s'éveille ! Mais avec l'arrivée de l'IA qui se met à jour automatiquement, les mères n'ont plus à se soucier des goulots d'étranglement des données. La vitalité de la super intelligence s'éveille ! Mais avec l'arrivée de l'IA qui se met à jour automatiquement, les mères n'ont plus à se soucier des goulots d'étranglement des données. Apr 29, 2024 pm 06:55 PM

La vitalité de la super intelligence s'éveille ! Mais avec l'arrivée de l'IA qui se met à jour automatiquement, les mères n'ont plus à se soucier des goulots d'étranglement des données.

Vitesse Internet lente des données cellulaires sur iPhone : correctifs Vitesse Internet lente des données cellulaires sur iPhone : correctifs May 03, 2024 pm 09:01 PM

Vitesse Internet lente des données cellulaires sur iPhone : correctifs

Comment annuler la suppression de l'écran d'accueil sur iPhone Comment annuler la suppression de l'écran d'accueil sur iPhone Apr 17, 2024 pm 07:37 PM

Comment annuler la suppression de l'écran d'accueil sur iPhone

L'US Air Force présente son premier avion de combat IA de grande envergure ! Le ministre a personnellement effectué l'essai routier sans intervenir pendant tout le processus, et 100 000 lignes de code ont été testées 21 fois. L'US Air Force présente son premier avion de combat IA de grande envergure ! Le ministre a personnellement effectué l'essai routier sans intervenir pendant tout le processus, et 100 000 lignes de code ont été testées 21 fois. May 07, 2024 pm 05:00 PM

L'US Air Force présente son premier avion de combat IA de grande envergure ! Le ministre a personnellement effectué l'essai routier sans intervenir pendant tout le processus, et 100 000 lignes de code ont été testées 21 fois.

Le document multimodal Alibaba 7B comprenant le grand modèle remporte le nouveau SOTA Le document multimodal Alibaba 7B comprenant le grand modèle remporte le nouveau SOTA Apr 02, 2024 am 11:31 AM

Le document multimodal Alibaba 7B comprenant le grand modèle remporte le nouveau SOTA

See all articles