Возникли проблемы с HTML :: Template - PullRequest
0 голосов
/ 06 июля 2011
foreach $result (keys %{$results_ref}){
    $source = $results_ref->{$result}->{abs_path};
    $source =~ s#/home/##;
    print "<div><img src=\"$source\" /></div>";
}

Кажется, HTML:Template поддерживает только базовый синтаксис.Как я могу сделать с ней логику, как описано выше?

ОБНОВЛЕНИЕ

Не всегда достаточно массива с хэшем, рассмотрим следующий пример:

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 to hash?

1 Ответ

2 голосов
/ 06 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...