分享
 
 
 

在Perl/CGI中使用模板

王朝perl·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在Perl/CGI中使用模板

作者: Dave Edis

from:(www.zdnet.com.cn)

<编者按:如果你不打算使你的网络应用系统出现混乱,那么就在Perl/CGI脚本中使用HTML模板吧,这样可避免大量冗余HTML代码的出现。>

大部分网络应用程序中用了很多HTML代码。象Hotmail这样的基于web的电子邮件系统,其中的登录屏幕、邮箱、发送信息、文件夹、菜单条、设置选项和其它栏目都使用了HTML代码。

网络程序是可以使用HTML的,但问题是HTML出现的地方太多,程序的每个需要显示的部分都需要设计HTML页面。这些HTML代码出现在哪里呢?就在你的Perl源码中。这就意味着在你的程序中,将会插入数千行的HTML代码,你的perl程序将会变得很难调试,在调试HTML的屏幕显示时,也是困难重重,要是此时再换个其他人来编辑HTML,就更是雪上加霜,不用提有多混乱了。解决这些问题的办法是:把HTML代码放到后缀为“.HTML”的文件中去,作为模板,然后,在所写的Perl/CGI 程序中,使用这些HTML模板文件。

为所有的那些HTML找一个新家

组织你的HTML模板的最好方法,就是让它们尽量靠近你的程序的存放目录。(要么同你的程序一起都放在同一目录中,要么把模板文件放在名为“/templates/”的子目录中。) 另外,在你给模板文件命名时,尽量取些描述性强的名字。我通常的命名方法是:下划线后面紧跟程序名,目的是用来区分常规的HTML文件和HTML模板。

例如,如果要创建基于Web的电子邮件程序“Web Mail”,我们的模板就这样命名:

_webmail_login.html # 登录

_webmail_message_list.html # 显示信件

_webmail_message_read.html # 阅读信件

_webmail_message_send.html # 创建/发送信件

_webmail_message_erase.html # 删除信件

_webmail_message_erase_confirm.html # 确认删除

_webmail_logoff.html # 退出

一看文件名,我们就很容易知道该文件是做什么的。一段时间以后,回过头来再作修改时,也不会搞错。如果你是同其他网络开发者协同工作,也不用担心他们在修改时会把程序搞乱。

现在,我们开始着手把所有的HTML从Perl/CGI程序中移出去,放到HTML模板文件中,然后,还需要有个办法把它们显示出来。所以,我们将编制一个称为&Template的Perl子程序,程序代码如下:

sub Template {

local(*FILE);# filehandle

local($file);# file path

local($HTML);# HTML data

$file = $_[0] || die "Template : No template file specified\n";

open(FILE, "<$file") || die "Template : Couldn't open $file : $!\n";

while (<FILE>) { $HTML .= $_; }

close(FILE);

$HTML =~ s/\$(\w+)/${ $1}/g;

return $HTML;

}

该程序中的大部分语句很简单,我们只是打开了一个模板文件,把其内容读出,并返回给程序。所用的技巧是使用了下面的正则表达式,它是用来搜索HTML模板中的Perl变量, (如:“$date”) 把变量的值取代其符号表示。

$HTML =~ s/\$(\w+)/${ $1}/g;

其工作原理是这样的:正则表达式搜索以“$”开头的变量名,“\w”表示字符(a-z,A-Z,0-9 或下划线),“+”意味着一个或多个字符。“\w+”两边的括号表示要把匹配的变量名存到“$1”中,最后, “${ $1}”计算出变量的值。记住,变量名存放在$1中。下面为例子:

### 显示登录屏幕

print "Content-type: text/html\n\n";

print &Template("_webmail_login.html");

这样,尽管HTML是存放在模板中,并不在你的程序里,变量值也可以算出来。

复杂的模板和HTML段

在某些场合,仅仅使用单一的模板还不能完成相应的任务,如在使用搜索引擎时,搜索结果往往情况各异,又比如,在做天气预报的网页时,你会根据预报的结果,来选择相应的图像和文本显示。在这些场合,你可以使用多个模板文件来构成显示屏幕。例如,你可以把下面的搜索结果放在页面抬头和脚注之间:

_search_results_header.htmlf # 页面抬头

_search_results_result.htmlf # 结果行

_search_results_footer.htmlf # 页面脚注

上面的每个部分被称为HTML片断,因为它仅是一个完整的HTML页中的一部分。我们把HTML片断文件的后缀规定为“.htmlf”,这就可以同完整的HTML文件区分开来。通过把HTML网页分解成HTML片断,你就可以在屏幕上显示出任何数量的搜索结果。

print &Template("_search_results_header.htmlf");

foreach $result (@results) {

print &Template("_search_results_result.htmlf");

}

print &Template("_search_results_footer.htmlf");

在我们天气预报的例子中,也可以使用HTML片断。同前面的例子相比,所不同的是,HTML片断并不是一个接一个地显示在屏幕上,而是在另外一个网页中根据需要,加载相应的HTML片断。比方说吧,我们的天气预报的主文件模板为_weather.html,我们打算把未来三天的天气预报插入到主HTML网页上,我们引入变量“$day1 $day2 $day3”,对每一种可能的天气情况,我们创建一个小的HTML片断文件,然后,根据需要,进行加载。

### Load HTML fragments for weather forecast

$day1 = &Template("_weather_sunny.htmlf");

$day2 = &Template("_weather_cloudy.htmlf");

$day3 = &Template("_weather_snowing.htmlf");

print &Template("_weather.html");

在HTML文件中,对于变量的表示方法,对于程序员来说是很熟悉的。(如,“Today is $date”)。然而有些人则认为,如果使用其它符号来标识变量,而不是用“$”符号,感觉更容易些。即使你是第一次考虑用模板来代替程序行中的HTML代码,此时你也仅需作很少的修改,就可以在程序中使用象“%variable%” ,“ __variable__”或采用其它你觉得有意义的符号。我认为通过使用模板,要作这些小修改不是很难的。

本文作者Dave Edis是Edis Digital公司的总裁,其公司位于加拿大,提供网络媒体的解决方案。Edis Digital公司为世界各地的用户开发基于Web的出版工具和应用程序。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有