[Perl Module] perl的HTML::Template模板技术

Dec 14th, 2009

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2009/12/14/perl-html-template.html

近来要做web应用中,研究了一下perl的模板技术,从没有写过web.真是痛苦.在编程技术中模板(Template)技术是非常常用的一种技术,这样可以分离美工和程序员..也就是所谓的MVC.
模板原理其实很简单,先做好html的样本,然后用程序读进来,在插入变量.最后输出.这样就分开了html和程序本身.
在perl中就是用HTML::Template是个很常用的模块,用来实现模板技术.在HTML::Template不但可以插入变量,还可以放条件,判断和文件插入.

 

HTML::Template模块的基本标记

这个模块有一些自己的HTML的标记.如<tmp_var>,<tmpl_if>,</tmpl_if>,<tmpl_loop>等,

<TMPL_VAR NAME=”TEST”> # 单个变量
<TMPL_LOOP NAME=”TEST”> #循环
<TMPL_IF NAME=”TEST”> # 条件语句
<TMPL_ELSE> # 条件语句
<TMPL_UNLESS NAME=”TEST”> # 条件语句
<TMPL_INCLUDE NAME=”temp2.html”> #  插入

这些标记可有二种写法,<tmpl_var name=parameter>和<tmpl_var parameter>,这个看你的喜好了.
 

简单的例子

 

#!/usr/bin/perl
use strict;
use warnings;
use HTML::Template;

my $html = new HTML::Template ( filename=>"html.tmpl");   #new一个对象出来.其中需要指定一个html的文件
$html->param( TEST => 'hello!' );       # 给html标准替换成这个变量的值
print $html->output;                 #html的输出

html.tmpl文件的内容





TEST: 


下面对变量的命令小小的介绍一下

我现在分开做三部分写,第一部分写perl中解析html的写法,另一部分写html中这个模块的标记是怎么样写的,以这样来分别介绍常用的一些标记用法
 

TMPL_VAR

普通变量的插入.记的给内容存成*.tmpl的文件.TMPL_VAR是做为Template Variable的意思.这样是为了和html分开.

#perl中的写法.
$html->param( name => [
            {name => 'tom', age => '21'},
            {name => 'fukai', age => '25'},
        ]); 

#html中的内容
  • :
#html输出
  • tom:21
  • fukai:25

注,上面可以在后面加入escape=html这样来做url的编码.如<TMPL_VAR TEST escape=html>.

 

TMPL_LOOP

循环这个是用在重复输出内容到一个地方.如表格

#perl中的写法.
$html->param( name => [
            {name => 'tom', age => '21'},
            {name => 'fukai', age => '25'},
        ]); 

#html中的内容
  • :
#html输出
  • tom:21
  • fukai:25

注,上面最开始的name是指参数的名字. TMPL_LOOP  和 /TMPL_LOOP  之间是重复的内容.                                                        
 

TMPL_IF, TMPL_ELSE, TMPL_UNLESS

条件语句,这些和perl基本的语法一样.这样会在不同的情况插入不同的内容.

#perl中的写法.
$html->param( test => 1);

#html


这个test=>1



#html输出

这个test=>1的

TMPL_INCLUDE

插入包含另一个html的文件.

这个主要是在一个html中插入另一个html
用法直接在html中写.自然会解析成别的一个html的内容到当前的网页中,这个perl中不用写什么
<TMPL_INCLUDE NAME="temp2.html">
 

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
  1. fengyong
    Aug 1st, 2011 at 12:54
    Reply | Quote | #2

    我一直用HTML::KTemplate 貌似功能比这个强大点。