Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

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 (Chancellor) 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
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2017-08-19 12:13 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (310 votes). Check out past polls.