Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

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

Comment on HTML-Template - Array of Hash
Select or Download Code
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 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 :(
Re: HTML-Template - Array of Hash
by choroba (Canon) 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.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://972954]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (14)
As of 2015-07-01 17:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (13 votes), past polls