2013-09-30 3 views
1

tmpl_loop을 사용하여 중첩 루프를 설정하려고하지만 HTML :: Template 모듈에 대한 경험이 거의 없습니다.HTML 템플릿을 사용하여 중첩 루프를 표시하는 방법

내가하려고 레이아웃이 같은 것입니다 : 등등

 
Name  Start   End 
Dog  04-02-1996 06-19-2011 

Breed: Terrier  Sex: Male 
Color: Brown   Eye Color: Green 
Weight: 10 Pounds  Attribute: bla bla 

Name  Start   End 
Dog  03-04-1985 06-01-1988 

Breed: Retriever  Sex: Female 
Color: Black   Eye Color: Green 
Weight: 50 Pounds  Attribute: bla bla 

그리고 ...

개의 수는 달라질 수 있습니다 그것은 수도 있고 추가 정보가 없을 수 있지만, 그럴 때 모든 필드가 표시되어야합니다.

이것은 수평 정보를 올바르게 표시하는 블록입니다.

그러나 샘플 디스플레이에 정보를 표시하려면 어떻게 HTML 템플리트를 수정합니까?

또한 어떻게 Perl 데이터 구조가 어떻게 생겼을까요?

감사합니다.

답변

3

중첩 루프가 필요하지 않은 경우입니다.

<table> 
    <TMPL_LOOP dogs> 
     <tr><td>&nbsp;</td><td></td><td></td><td></td><td></td><td></td></tr> 
     <tr> 
      <td></td><td>Name</td> 
      <td></td><td>Start</td> 
      <td></td><td>End</td> 
     </tr> 
     <tr> 
      <td><TMPL_VAR ldogname></td><td><TMPL_VAR dogname></td> 
      <td><TMPL_VAR lstart></td><td><TMPL_VAR start></td> 
      <td><TMPL_VAR lend></td><td><TMPL_VAR end></td> 
     </tr> 
     <tr> 
      <td><TMPL_VAR lbreed></td><td><TMPL_VAR breed></td> 
      <td><TMPL_VAR lsex></td><td><TMPL_VAR sex></td> 
      <td><TMPL_VAR lcolor></td><td><TMPL_VAR color></td> 
     </tr> 
     <tr> 
      <td><TMPL_VAR leye></td><td><TMPL_VAR eye></td> 
      <td><TMPL_VAR lweight></td><td><TMPL_VAR weight></td> 
      <td><TMPL_VAR lattr></td><td><TMPL_VAR attr></td> 
     </tr> 
    </TMPL_LOOP> 
</table> 

및 코드 :

는 당신의 템플릿 파일을 변경

#!/usr/bin/perl 
use warnings; 
use strict; 
use HTML::Template; 

my $template=HTML::Template->new(filename=>'template.txt'); 
my @dogs=(#dogs data 
    {dogname=>'Dog',start=>'04-02-1996',end=>'06-19-2011',breed=>'Terrier',sex=>'Male',color=>'Brown',eye=>'Green',weight=>'10 Pounds',attr=>'bla bla'}, 
    {dogname=>'Dog',start=>'03-04-1985',end=>'06-01-1988',breed=>'Retriever',sex=>'Female',color=>'Black',eye=>'Green',weight=>'50 Pounds',attr=>'bla bla'}, 
); 
my %labels=(
    ldogname=>'', 
    lstart=>'', 
    lend=>'', 
    lbreed=>'Breed: ', 
    lsex=>'Sex: ', 
    lcolor=>'Color: ', 
    leye=>'Eye Color: ', 
    lweight=>'Weight: ', 
    lattr=>'Attribute: ' 
); 
for my $dog (@dogs) { #mix labels and values 
    while (my ($k,$v)=each %labels) { 
     $dog->{$k}=$v; 
    } 
} 
$template->param(dogs=>\@dogs); 
print $template->output; 

당신은 원하는 출력을해야합니다. http://www.perlmonks.org/?node_id=770278http://www.perlmonks.org/?node_id=193367 (구글이 더 많은 결과를 반환)

+0

이 내가 원하는 것과 매우 가까이 : 귀하의 질문에 대답 할 수 있지만

것은, 당신은 중첩 루프의 몇 가지 예를 확인할 수 있습니다. 그래도 몇 가지. 내 예는 약간 벗어났습니다. 실제로 각 행에 제목 (name, start, end)이 있어야합니다. 그래서 1 행은 2 행을 향하고 있습니다. 또 다른 것은 각 범주 헤더 인 등이 ... 이 그래서 내가 당신의 예를 재현하려고 품종 테리어 –

+0

것 자체 세포, 즉 품종, 성별,에 있어야합니다! 새로운 요구 사항에 대한 답을 업데이트하고, HTML의 다른 변경 사항이 필요하면 그 후에 직접 알아낼 수 있습니다. – psxls

+0

좋아, 업데이트 됨 – psxls

관련 문제