Если я правильно понимаю ваш вопрос, я думаю, что вы ищете тег 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}