Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

HTML-Template - Array of Hash

by hmadhi (Acolyte)
on May 29, 2012 at 08:46 UTC ( #972954=perlquestion: print w/replies, xml ) Need Help??
hmadhi has asked for the wisdom of the Perl Monks concerning the following question:

I have two Array of Hashes: The first contains values for a current time interval and the second contains values for a previous time interval.

@AoHcurrent=( { node => "ABC", link => "DEF", time => "10:00", value => "100", }, { node => "FGH", link => "IJK", time => "10:00", value => "200", }, ); AoHprevious= ( { node => "ABC", link => "DEF", time => "09:45", value => "10", }, { node => "FGH", link => "IJK", time => "09:45", value => "50", }, );

I want to now use HTML-Template to present this data. Something like :

NODE LINK VALUE --------------------- ABC DEF 100(10) FGH IJK 200 (50)

the values in brackets represent the previous value.

my %html_template_parameters = ( AOHCURRENT => \@AoHcurrent, AOHPREVIOUS => \@AoHprevious, ); my $html_template=qq{Report.tmpl}; my $html_output=qq{Report.html}; htmlReport($html_template,$html_output,\%html_template_parameters) +;

where htmlReport is a function that generates the report

I require guidance on defining the Report.tmpl file.

Thanks you in advance

Replies are listed 'Best First'.
Re: HTML-Template - Array of Hash
by tinita (Parson) on May 29, 2012 at 09:18 UTC
    I don't know if this is possible in HTML::Template without passing manipulated parameters. For simplicity, I would just go over the @AoHcurrent array and add the value from the @AoHprevious in perl and then pass it to HTML::Template.
    You *can* do this in HTML::Template::Compiled via expressions, but the syntax is not very nice:
    my $htc = HTML::Template::Compiled->new( filename => "test.html", use_expressions => 1, tagstyle => [qw/ +tt /], loop_context_vars => 1, ); $htc->param( current => \@AoHcurrent, previous => \@AoHprevious, ); template: NODE LINK VALUE --------------------- [%loop current %] [%= node %] [%= link %] [%= value %] ([%= expr=".previous[__index__] +{'value'}" %]) [%/loop current %]
    With .previous you tell it to go to the root of the parameter stash and the key "previous", with [__index__] you refer to the element number __index__ (the current index in the loop) and {'value'} then gets the hash element for the key 'value'. note that this is not perl syntax, just similar.
    You need HTML::Template::Compiled 0.97 or newer for this.
Re: HTML-Template - Array of Hash
by choroba (Bishop) on May 29, 2012 at 11:46 UTC
    Crossposted at StackOverflow. It is considered polite to inform about crossposting so people not visiting both sites do not waste their time on solving a problem already solved at the other end of the internet.

      Apologies and point taken.

Re: HTML-Template - Array of Hash
by Anonymous Monk on May 29, 2012 at 10:25 UTC
    Type 'perldoc HTML::Template' and see the 'TMPL_LOOP' section. Also the 'loop_context_vars' parameter will help you define HTML tables.

      I forgot logginig in :-) The above comment was posted by me.

      UPDATE: I noticed I can't prove the above comment is mine :(

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://972954]
Approved by Corion
[erix]: I do some work as a corrector (if that's the right word) and often I have to remove phrases that people think is dutch but that is really literally taken from english (and does not exist in dutch. Although at some point it becomes acceptable, of course)
[erix]: "Do not be dafter than you are" doesn't seem a very good translation

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2018-03-19 22:22 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (246 votes). Check out past polls.