Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: HTML::Template if key of hash matches value of hash.

by moritz (Cardinal)
on Mar 31, 2013 at 15:16 UTC ( #1026366=note: print w/ replies, xml ) Need Help??


in reply to HTML::Template if key of hash matches value of hash.

The trick is to add some more logic to your perl code:

my $has_approved_records = 0; my $reqs; while (my $row = $sth->fetchrow_arrayref) { $has_approved_records 1 = if $row->{status} eq 'Approved'; push @$reqs, $row; } ... $template->param(REQS => $reqs, HAS_APPROVED_RECORDS => $has_approved_ +records);

And in the template

<TMPL_IF HAS_APPROVED_RECORDS> <span class="hotspot" onmouseover="tooltip.show('<strong>Approved +Vacation Requests</strong><br /><TMPL_VAR DATE>');" onmouseout="toolt +ip.hide();"> </TMPL_IF>


Comment on Re: HTML::Template if key of hash matches value of hash.
Select or Download Code
Replies are listed 'Best First'.
Re^2: HTML::Template if key of hash matches value of hash.
by walkingthecow (Friar) on Apr 02, 2013 at 06:41 UTC
    While not exactly what I was looking for (my fault for lacking clarity in my post), your reply was very helpful. Thank you. I will be sure to post my code when I figure it out. I figured a break was what was needed to solve this issue.
      Just wanted to post my code as an update on how I did this in case anyone is ever interested in the same thing: The trick was in my SQL statement...
      my $sth = $dbh->prepare( " select t.id,t.user,t.email,t.status,t.date,t.req_date, ( SELECT GROUP_CONCAT( (case when status = 'Approved' then user + end) separator ', ') FROM requests s WHERE s.date = t.date) AS approved FROM requests t WHERE status = 'Pending' AND req_email = '$email' AND date >= '$date' ORDER BY employee,date " ); $sth->execute(); my $reqs; push @{$reqs}, $_ while $_ = $sth->fetchrow_hashref(); my $template = HTML::Template->new( filename => 'approve.html' + ); $template->param( REQS => $reqs, ); print $template->output();
      And here's my template code:
      <TMPL_IF REQS> <form> <table class=approve> <tr> <th class=approve>Approve</th> <th class=approve>Decline</th> <th class=approve>Date</th> <th class=approve>Employee</th> <th class=approve>Status</th> <th class=approve>Request Date</th> </tr> <TMPL_LOOP NAME=REQS> <tr class=approve> <td class=approve><input type=radio name=apid<TMPL +_VAR NAME=ID> value=Approved></td> <td class=approve><input type=radio name=apid<TMPL +_VAR NAME=ID> value=Declined></td> <td class=approve> <TMPL_IF NAME=APPROVED> <span class="hotspot" onmouseover="tooltip +.show('<strong>Approved Vacation Requests</strong><br /><TMPL_VAR NAM +E=APPROVED>');" onmouseout="tooltip.hide();"> </TMPL_IF> <TMPL_VAR NAME=DATE> <TMPL_IF NAME=APPROVED> </span> <script type="text/javascript" language="j +avascript" src="js/script.js"></script> </TMPL_IF> </td> <td class=approve><TMPL_VAR NAME=USER></td> <td class=approve><TMPL_VAR NAME=STATUS></td> <td class=approve><TMPL_VAR NAME=REQ_DATE></td> <input type=hidden value=<TMPL_VAR EMAIL> name=emp +_email<TMPL_VAR NAME=ID>> <input type=hidden value=<TMPL_VAR EMPLOYEE> name= +emp_name<TMPL_VAR NAME=ID>> <input type=hidden value=<TMPL_VAR DATE> name=date +<TMPL_VAR NAME=ID>> </tr> </TMPL_LOOP> <tr class=approve> <th class=approve colspan=6> <input type=submit value="Approve / Decline"> <input type=hidden value=process name=state> </th> </tr> </table> </form> <TMPL_ELSE> <br /><b>There are no pending requests!</b><br /> </TMPL_IF>

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1026366]
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-08 05:16 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 (94 votes), past polls