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进行哈希?
答案 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}