转贴:HTML::KTemplate模块使用指南[一]
HTML::KTemplate模块使用指南[一]介绍HTML::KTemplate模块是由Kasper Dziurdz先生开发一款功能强大的HTML代码解析的模块,模块功能非常强大,功能灵活,而不臃肿,这里不做过多的评价,使用后我想大家就会赶到这个模块的强大语法了以及功能了。
安装方法:
安装程序会把HTML::KTemplate安装到perl模块库中的HTML目录下 :
1.Windows下安装方法:
ppm> search HTML::KTemplate
Searching in Active Repositories
1. HTML-KTemplate [1.32] Perl module to process HTML templates.
ppm> install HTML-KTemplate
c:\perl –e “use HTML::KTemplate;”
#测试是否安装上了HTML::KTemplate,如若安装上什么也不会显示,如若没有安装上,就会抛出错误信息。
2.Linux下安装方法:
[[email]root@bloves.org[/email]]#wget [url]http://search.cpan.org/CPAN/authors/id/K/KA/KASPER/HTML-KTemplate-1.33.tar.gz[/url]
[[email]root@bloves.org[/email]]#tar -vzxf HTML-KTemplate-1.33.tar.gz
[[email]root@bloves.org[/email]]#cd HTML-KTemplate-1.33
[[email]root@bloves.org[/email]]#perl Makefile.PL
[[email]root@bloves.org[/email]]#imake test
[[email]root@bloves.org[/email]]#make install
[[email]root@bloves.org[/email]]# perl –e “use HTML::KTemplate;” #测试
使用方法:#下面使用的例子基本上都是copy说明文件中的。
<html>
<head><title>[% TITLE %]</title>
<body>
Hello! [% TEXT %]<p>
<!-- BEGIN LOOP --> #循环开始,名字为LOOP,这个名字在程序中需要使用
[% TEXT %]<br> #循环中需要替换的变量
<!-- END LOOP --> #结束循环,必须加上这个,否则KTemplate会抛出错误,并停止运行.
</body>
</html>
解析上面的Html模板:
#!/usr/bin/perl -w
use HTML::KTemplate;
$tpl = HTML::KTemplate->new('path/to/templates');
#设定根目录,这个是必须的,否则KTemplate在开发文件时会出错。
$tpl->assign( TITLE => 'Template Test Page' );
#给变量赋值。
$tpl->assign( TEXT => 'Some welcome text ...' );
#给变量赋值
foreach (1 .. 3) {
#开始循环.循环的块是LOOP块
#替换LOOP块中的[% TEXT%]为”Just a test …”;
$tpl->assign( LOOP,
TEXT => 'Just a test ...',
);
}
#处理模板文件
$tpl->process('template.tpl');
print "Content-type: text/html\n\n";
$tpl->print(); #输出显示
多层循环嵌套结构:
有时开发web程序时,需要一些嵌套的模板结构,KTemplate模块的嵌套循环功能真是为这个应用准备的。
在KTemplate模块中有全局变量和局部变量之分,所以在使用的时候需要小心。
下面是一个例子:
<!-- BEGIN LOOP_ONE -->
<p>bloves</p>
<!-- BEGIN LOOP_TWO -->
ID:[% VAR %]<br>[% title %]
<!-- END LOOP_TWO -->
<p>royce</p>
<!-- END LOOP_ONE -->
use HTML::KTemplate;
my $Template = HTML::KTemplate->new(root=>'e:/modperl/perl/bin/');
for(1..3){
$Template->block('LOOP_ONE');
for(1..4){
$Template->block('LOOP_ONE.LOOP_TWO');
#当嵌套循环时内层循环需要提供上一层的符号,也就是我们这里的LOOP_ONE.LOPP_TWO这样的形式,这里是说我们的LOOP_TWO循环是嵌套在LOOP.ONE中。
$Template->assign(VAR => 'txt',title=>'bloves');
#注意上面的语句,因为在单循环中,在赋值循环中赋值需要提供循环块的符号(这里是LOOP_TWO).但在多层循环中就不可以这样,因为KTemplate按就近原则取得需要赋值的变量。
#$Template->assign(title=>'bloves');
}
$Template->block();
}
$Template->process("test.html");
print "Content-type: text/html\n\n";
$Template->print();
这次就先到这吧,时间不早了,改天继续写。包括缓存的支持等,甚至分析这个原代码。这个程序写的非常漂亮,俺比较喜欢。
当然你可以查看这个模块的文档:
[url]http://search.cpan.org/~kasper/HTML-KTemplate-1.33/KTemplate.pm#AUTHOR[/url]
_________________ [quote][b]下面是引用cnyouker于2006-03-21 22:29发表的转贴:HTML::KTemplate模块使用指南[一]:[/b]
HTML::KTemplate模块使用指南[一]
介绍HTML::KTemplate模块是由Kasper Dziurdz先生开发一款功能强大的HTML代码解析的模块,模块功能非常强大,功能灵活,而不臃肿,这里不做过多的评价,使用后我想大家就会赶到这个模块的强大语法了以及功能了。
安装方法:
安装程序会把HTML::KTemplate安装到perl模块库中的HTML目录下 :
1.Windows下安装方法:
.......[/quote]
非常好,原来bloves写的这个文档。 不过好象没有[二] 。。
chifeng可以参考此文档。其实ktemplate当时选为extmail的模板引擎也是因为其小巧,功能强大,
速度还不错,代码写得好等原因:) ^_^。
爽哦。被置顶喽!!! 学习。。。。ing。。。。。
我学习一下,写个[二] 新手说明:
$tpl = HTML::KTemplate->new('path/to/templates'); 在这个地方,括号里应该是存放模板的一个路径,不需要指出文件名。。
$tpl->process('template.tpl'); 在这个地方,括号里,的文件名是你在上边一个路径下,的一个模板文件。也就是本例子中的以下代码所保存的文件名。
<html>
<head><title>[% TITLE %]</title>
<body>
Hello! [% TEXT %]<p>
<!-- BEGIN LOOP --> #循环开始,名字为LOOP,这个名字在程序中需要使用
[% TEXT %]<br> #循环中需要替换的变量
<!-- END LOOP --> #结束循环,必须加上这个,否则KTemplate会抛出错误,并停止运行.
</body>
</html>
PS:感谢学习过程中,BBC的无私帮助。。。。。 当然这个HTML::KTemplate 还有多种用法。。。继续学习中。。。。
希望大家不要只限于这一种用法。。。。 哈哈!没想到04年写的文章,现在还能看到。我自己的都没了!
现在和朋友在开发yougedi.com所以KTemplate好久没用了。 [quote][b]下面是引用bloves于2006-04-17 10:55发表的:[/b]
哈哈!没想到04年写的文章,现在还能看到。我自己的都没了!
现在和朋友在开发yougedi.com所以KTemplate好久没用了。[/quote]
楼上的大哥,yougedi.com看上去不错,问一下是怎么区分中介和个人的? 二是不是没有出来,只能看英文的了。
HTML::KTemplate 如果不直接安装包,是直用采用KTemplate.pm并在
unshift @INC,'/usr/local/httpd/htdocs/extman/libs/';
代码如下[code]
unshift @INC,'/usr/local/httpd/htdocs/extman/libs/';
#print @INC;
@ISA=qw(Exporter HTML::KTemplate);
use Exproter;
use HTML::KTemplate;
$tpl = HTML::KTemplate->new('/usr/local/httpd/htdocs/extman/html/standard');
$tpl->assign( TITLE => 'Template Test Page' );
$tpl->assign( TEXT => 'Some welcome text ...' );
foreach (1 .. 3) {
$tpl->assign( LOOP, TEXT => 'Just a test ...');
}
$tpl->process('test.html');
print "Content-type: text/html\n\n";
$tpl->print();
[/code]
其错误结果为:
[code]
Can't locate Exproter.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.8/i686-linux /usr/local/lib/perl5/5.8.8 /usr/local/lib/perl5/site_perl/5.8.8/i686-linux /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl .) at ./htmltempl.pl line 5.
BEGIN failed--compilation aborted at ./htmltempl.pl line 5.
[/code]
我知道这个结果是什么原因,但是我输出print @INC 确有这个目录的。这里就不知道为什么找不到该模块了。
/usr/local/httpd/htdocs/extman/libs/HTML/KTemplate.pm是这个文件位置。 [quote][b]下面是引用jacksonluo于2006-10-10 15:26发表的:[/b]
二是不是没有出来,只能看英文的了。
HTML::KTemplate 如果不直接安装包,是直用采用KTemplate.pm并在
unshift @INC,'/usr/local/httpd/htdocs/extman/libs/';
.......[/quote]
楼主拼写错误:
[quote]Exp[color=red]ro[/color]ter.pm[/quote]论坛另一个版块的帖子已经说过了 可以比较吗? 比如 A=B A>B A!=B这样的运算符吗?如果有,也是这样表示的吗???
页:
[1]