Mar 13

[原]Perl的HTML::KTemplate模块 阴

linuxing , 14:56 , 编程 » Perl , 评论(0) , 引用(0) , 阅读(32100) , Via 本站原创 | |

二、其他参数
详细的参数说明,还是看官方的文档最好☞这里
下面,我只列出一些需关注的内容:
1、$tpl->assign后面跟的是hash、hash的引用、函数的引用,当然也可以是嵌套的hash,而不是普通的标量或数组

%hash = (
      VARIABLE => 'Value',
  );
  
$tpl->assign( %hash );
$tpl->assign(\%hash );
$tpl->assign( VARIABLE => 'Value' );

嵌套的hash:

$tpl->assign(

    USER => {
        NAME  => 'Kasper Dziurdz',     # [% USER.NAME %]
        EMAIL => 'kasper@repsak.de',   # [% USER.EMAIL %]
    },
      
);

用[% USER.NAME %] 和 [% USER.EMAIL %]来在HTML模板中对应。

函数的引用:

$tpl->assign(

    BENCHMARK => sub {
        # get benchmark data
        return 'created in 0.01 seconds';
    }

);

这样,通过[% BENCHMARK %]就可执行该函数,并替换到HTML模板中。

2、使用<!-- BEGIN BLOCKNAME --> 和 <!-- END BLOCKNAME -->表示块
创建一个块:

#!/usr/bin/perl -w
use HTML::KTemplate;
$tpl = HTML::KTemplate->new('templates');

$tpl->assign( HEADER  => 'Some numbers:' );
  
@block_values = ('One', 'Two', 'Three', 'Four');
  
foreach (@block_values) {
  
    $tpl->block('LOOP_NUMBERS');
    $tpl->assign( NUMBER    => $_ );
    $tpl->assign( SOMETHING => '' );
  
}
  
$tpl->block();  # 块结束
  
$tpl->assign( FOOTER => '...in words.' );
$tpl->process('template02.tpl');
$tpl->print();

※ 注意,循环的标记LOOP_NUMBERS。

对应的HTML模板是:

[% HEADER %]
  
<!-- BEGIN LOOP_NUMBERS -->
  
    [% NUMBER %]
  
<!-- END LOOP_NUMBERS -->
  
[% FOOTER %]

执行结果:
引用
# perl ktemplate02.pl
Some numbers:

    One

    Two

    Three

    Four

  ...in words.

因assign方法中调用的是引用,所以,也可以使用匿名数组来实现:

$tpl->assign(
    HEADER  => 'Some numbers:',
    LOOP_NUMBERS =>
        [
            { NUMBER => 'One'   },
            { NUMBER => 'Two'   },
            { NUMBER => 'Three' },
            { NUMBER => 'Four'  },
        ],
    FOOTER => '...in words.',
);

※ 注意其中的[]和{}写法,分别是匿名数组和hash。

3、BLOCK的嵌套
perl脚本:

foreach (@block_one) {

    $tpl->block('BLOCK_1');
    $tpl->assign(VAR => $_);

    foreach (@block_two) {

        $tpl->block('BLOCK_1', 'BLOCK_2');
        $tpl->assign(VAR => $_);

    }
}

$tpl->block();  # 离开BLOCK,注意其位置

对应的HTML模板:
引用
<!-- BEGIN BLOCK_1 -->

    <!-- BEGIN BLOCK_2 -->

    <!-- END BLOCK_2 -->

<!-- END BLOCK_1 -->

※ 嵌套BLOCK还可以使用IF ELSE写法,详细见这里

4、导入其他HTML模板
可以通过下面的写法,在一个文件中导入多个HTML模板:

<!-- INCLUDE file.tpl -->

<!-- INCLUDE "file.tpl" -->

<!-- INCLUDE 'file.tpl' -->

当然,字符串部分也可以在perl中用变量来定义:

<!-- INCLUDE VARIABLE -->

5、一些方法
◎ process()方法

$tpl->process('header.tpl', 'footer.tpl');

$tpl->process('header.tpl');
$tpl->process('footer.tpl');

$tpl->process(\$scalar);
$tpl->process(\@array);
$tpl->process(\*FH);

◎ print()方法

$tpl->print();
  
$tpl->print(\*FILE);

\*FILE是一个文件句柄的引用,也就是输出到文件中。

◎ fetch()方法
生成一个标量,然后输出:

$output_ref = $tpl->fetch();
  
print FILE $$output_ref;

6、改变Tag标记

$HTML::KTemplate::VAR_START_TAG = '[%';
$HTML::KTemplate::VAR_END_TAG   = '%]';
$HTML::KTemplate::BLOCK_START_TAG = '<!--';
$HTML::KTemplate::BLOCK_END_TAG   = '-->';
$HTML::KTemplate::INCLUDE_START_TAG = '<!--';
$HTML::KTemplate::INCLUDE_END_TAG   = '-->';


内文分页: [1] [2]
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]