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

看起來HTML:Template只支持基本語法。我如何用上面的邏輯來做它?HTML有問題::模板

UPDATE

一個數組引用散列是不夠的,請看下面的例子:

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>"; 
    } 

你將如何與數組引用做哈希?

回答

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--> 

EDIT(響應於更新):

再次,如果我理解正確,那麼我會使用不同的密鑰來驅動的邏輯模板循環。你可以有TMPL_IFTMPL_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--> 

編輯:更新,包括$哈希{左}

+0

所以,唯一的選擇是傳遞一個數組引用? –

+0

HTML ::模板需要模板循環的匿名散列的arrayref。這就是它設計的方式。另外值得注意的是,匿名哈希也可以有許多鍵。 –

+0

但在某些情況下,我只是想傳遞哈希引用而不是散列arrayref。 –