HTML :: Template有问题

时间:2011-07-06 02:43:50

标签: perl templates

foreach $result (keys %{$results_ref}){
    $source = $results_ref->{$result}->{abs_path};
    $source =~ s#/home/##;
    print "<div><img src=\"$source\" /></div>";
}

似乎HTML:Template仅支持基本语法。我怎么能用它做上面的逻辑?

更新

要散列的arrayref并不总是足够,请考虑以下示例:

print $hash{LEFT};
foreach $i ($hash{START}..$hash{END}){
    if($pager == $i){
        print "<span>$i<span>";
    }
    else {
        print "<span><a href=\"/index.pl?page=$i\">$i</a></span>";
    }

你如何使用arrayref进行哈希?

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,我认为您正在寻找TMPL_LOOP标记。

构建一个哈希数组,并将其作为变量传递给param()调用。然后使用TMPL_LOOP构建您在foreach中执行的操作。

 my $sources_loop = [];
 foreach $result (keys %$results_ref) {
    $source = $results_ref->{$result}->{abs_path};
    $source =~ s#/home/##;
    push(@$sources_loop, { source => $source });
 }

 $template->param(sourcesloop => $sources_loop);

然后在模板中:

 <!--TMPL_LOOP NAME="sourcesloop"-->
     <div><img src="<!--TMPL_VAR NAME="source"-->" /></div>
 <!--/TMPL_LOOP-->

编辑(对更新的回应):

同样,如果我理解正确,那么我会使用不同的键来驱动模板循环的逻辑。您可以将TMPL_IF作为TMPL_LOOP

的一部分
my $sources_loop = [];
foreach $i ($hash{START}..$hash{END}){
    if($pager == $i){
         push(@$sources_loop, { lone => $i });
    }
    else {
        push(@$sources_loop, { linked => $i });
    }
}

$template->param(sourcesloop => $sourcesloop, hashleft => $hash{LEFT});

模板:

 <!--TMPL_VAR NAME="hashleft"-->
 <!--TMPL_LOOP NAME="sourcesloop"-->
     <!--TMPL_IF NAME="lone"--><span><!--TMPL_VAR NAME="lone"-->"</span><!--/TMPL_IF-->
     <!--TMPL_IF NAME="linked"--><span><a href="/index.pl?page=<!--TMPL_VAR NAME="linked"-->"><!--TMPL_VAR NAME="linked"--></a></span><!--/TMPL_IF-->
 <!--/TMPL_LOOP-->

编辑:已更新为包含$ hash {LEFT}