[Perl] Template::Toolkit 模板技术.
Template::Toolkit, 简称TT, 它本身是一套非常强大的模块,我发现它比 HTML::Template 更加强大的模板.可以用超强来讲.可以给复杂变量传到模板里(比如数组,哈希),也可以在模板里定义这些变量,模板中可以用逻辑,包括IF ELSE 结构和各种循环结构, 有很多与定义的 Vmethod (虚方法)可以调用,这个很好用的,支持扩展其功能的 Plugin.还有什么 过滤器 filter 之类.
想了解 HTML::Template 可以看我以前的文章, perl的HTML::Template模板技术.
Template::Toolkit简单的例子
use Template; # 建一个 TT 的对象 my $config = { INCLUDE_PATH => '/template/path', EVAL_PERL => 1, }; my $template = Template->new($config); my $vars = { var => "放入模板的内容", }; # 使用 my $templateFile = 'template.tt'; my $outputContent; $template->process($template, $vars, $outputContent) || die $template->error(); print $output;
template.tt 的文件内容
<title></title> 这里出现的是: [% var %]
通过上面可以看到,是使用置换变量来定义$vars中.
Template::Toolkit Config 的常用参数
INCLUDE_PATH 也就是你的template文件所放置的位置,可以指定不只一个路径。
EVAL_PERL 这个选项是设定是否让你的Template执行Perl的区块。
POST_CHOMP 这个选项跟chomp函数有一些类似,它可以帮你去除使用者参数的空白字符。
PRE_PROCESS 设定所有的模板在被载入之后,都必须预先执行某个程序,例如先把档头输出到模板中等等。
Template Toolkit 和 HTML::Template 最大的分别之一就是可以有自己对变量进行处理
Template Toolkit 中使用数组
例如我们使用 Template 提供的 FOREACH 循环,来取一个数组的数据
程序写法
@array = (1, 2, 3, 4, 5, );
模板写法
[% FOREACH array = arrays %] 数据:[% array %] [% END %]
Template Toolkit 中使用Hash,我们可以直接使用键值
程序写法
%hash = ( name => 'php-oa', age => '23', ); my $vars = { var => \%hash };
模板写法
[% var.name%] [% var.age %]
[% INCLUDE %] 插入其它模板到当前模板中
[% INCLUDE copyright.tt2 %]
这个方便吧,多个模板,时相当的方便.只要修改一下 copyright.tt2 的文件,整个模板系统都会改变.
Template::Toolkit 模板其它内部的标签
和 HTML::Template 这个就很接近了
while
[% WHILE condition %] .... [% END %]
if
[% IF condition %] .... [% ELSE %] .... [% END %]
ELSIF
[% IF condition %] .... [% ELSIF condition2 %] .... [% ELSE %] .... [% END %]
直接写 Perl 程序
还有个奇怪的地方.想在模板里面写Perl程序,也只需要这么作:
[% PERL %] # perl 程序码 .... [% END %]
Template::Toolkit 模板其它一些常用的技巧
使用 - 去掉换行
Hello [% a = 3 %] World [% a %]
这个输出的话为“Hello \nWorld 3\n”。而这么写可以把里面的 \n 去掉:
Hello [% a = 3 -%] World [% a -%]
输出为“Hello World 3”
合并两个 TT 代码
[% user.name %][% END %]
可以写成
[% user.name; END %]
INSERT 和 INCLUDE 的区别
INSERT 只是插入文件的内容而不管你是不是另一个 .tt 文件。而 INCLUDE 的话如果是另一个 .tt 文件的话会执行它。
比如你有一个文件叫 footer.tt, 内容为:
以下是引用片段: Copyright 2004-2005 All Rights Reserved. Powered by <a href="Eplanet.html">Eplanet</a> && <a href="http://catalyst.perl.org">Catalyst</a> [% CatalystVersion %]. |
当在另一个文件中调用 [% INSERT footer.tt %] 时输出的结果跟上面的会一样。里面的 [% CatalystVersion %] 是原封不动。而如果是用 [% INCLUDE footer.tt %] 的话里面的 [% CatalystVersion %] 会被执行为这个变量的值。
BLOCK
比如你有段代码要执行两次。比如我有一个导航栏,需要上面放一个下面放一个。那我可以这么写:
[% show_guidebar = BLOCK %] <p>[% IF prev_topic %]<</p> [% END %] [% show_guidebar %] ... [% show_guidebar %]
注释
注释很简单,在 [% 后加上 # 那这一行就被注释掉了。唯一值得注意的是下面这两种是不一样的:
[%# a = 77 b = 88 %] a: [% a %] b: [% b %]
输出 a: b:
而[% 和 # 中间空了一格后就只有注释一行而不是整个 [% %], 如:
[% # a = 77 b = 88 %] a: [% a %] b: [% b %]
输出 a: b: 88
修改 TT 的 [%%] 标签
如果要修改上面的[%%]标签,认为不好看的话,可以如下操作
my $template = Template->new({ START_TAG => quotemeta(' quotemeta('?>'), });
那么刚刚在模板里的变量就应该改写成<? var ?>.
TT 进行时间显示
比如需要显示一个 2009-02-26这样一个格式的时间,而不希望改变Controller
Template::Plugin::Date 这个perl模块可以解决问题
例子:
[% USE date %] [% date.format(date.now, '%y-%m-%d') %]
这样就得到了2009-02-26
如果觉得不够用呢.还可以调用Date::Calc
[% calc = date.calc %]
[% calc.Monday_of_Week(22, 2001).join('/') %]
建议继续学习:
- perl更新/修改/删除文本文件内容 (阅读:9483)
- perl大牛flw传说 (阅读:6525)
- perl模块Getopt::Std用法及实例-从命令行读取参数模块 (阅读:5940)
- 在perl中连接和使用sqlite做数据存储 (阅读:5110)
- Perl命令行常见用法及技巧 (阅读:4868)
- perl的expect使用方法,实现非交互式登录。 (阅读:4547)
- Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (阅读:4497)
- perl模块之MIME::Lite发送有附件的邮件 (阅读:4460)
- perl大牛唐凤传说 (阅读:4287)
- 前端模板引擎 (阅读:3799)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶凯 来源: 扶凯
- 标签: Perl Toolkit 模板
- 发布时间:2010-04-14 09:22:51
- [71] IOS安全–浅谈关于IOS加固的几种方法
- [70] Twitter/微博客的学习摘要
- [65] 如何拿下简短的域名
- [63] Go Reflect 性能
- [63] android 开发入门
- [62] find命令的一点注意事项
- [60] 流程管理与用户研究
- [59] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [59] 读书笔记-壹百度:百度十年千倍的29条法则