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

Re^6: Perl CGI and Template Toolkit

by Perobl (Beadle)
on Jan 04, 2012 at 15:47 UTC ( #946248=note: print w/ replies, xml ) Need Help??


in reply to Re^5: Perl CGI and Template Toolkit
in thread Perl CGI and Template Toolkit

Thank you so much Eliya! I tried your code and it works great. You can pass a HoH to MIME::Lite::TT::HTML, I stand corrected :).

I thought I understood hash usage with TT2, but apparently I'm missing something. Could you possibly help me a bit more?

The data I wish to share in my email is queried from a DB:

$sth = $dbh -> prepare("SELECT * FROM bs_trans WHERE bsid = ?"); $sth -> execute($bsid);

I then generate my HoH using:

my $i = 0; while (@rray3 = $sth -> fetchrow_array()) { $item_hoh{$i} => {index => $i, mva => $rray3[3], hv1 => $rray3[5], + lv1 => $rray3[7], ltc => $rray3[10], qty => 'tbd'}; $i++; };

I then prepare my email:

my $msg = MIME::Lite::TT::HTML -> new( From => 'donotreply@blahblah.com', To => $to, Cc => $cc, Subject => 'Bid Strategy System - Final Pricing Approval', Template => { html => 'email_bid_strategy_final_appr.tt', }, TmplOptions => \%options, TmplParams => \%item_hoh, ); $msg -> send();

Notice that I'm passing the hash reference "\%item_hoh" to TT2 via TmplParams whereas you passed $HoH. I need to generate my HoH on the fly. While your code works for a hard coded HoH, mine doesn't and I don't understand why.

Again, in TT2, I'm attempting to display the results this way:

[% FOREACH record IN item_hoh.values.nsort('index') %] <tr> <td>[% record.index %]</td> <td>[% record.mva %]</td> <td>[% record.hv1 %]</td> <td>[% record.hv2 %]</td> <td>[% record.ltc %]</td> <td>[% record.qty %]</td> <tr> [% END %]

None of the data is displayed in my emails when I use this code ... and I don't understand why. Thank you so much, I really appreciate your help, and I would be happy to buy you lunch because I'd really like to include this data in a table format in my emails :D.


Comment on Re^6: Perl CGI and Template Toolkit
Select or Download Code
Re^7: Perl CGI and Template Toolkit
by Eliya (Vicar) on Jan 04, 2012 at 16:34 UTC

    When you refer to something like item_hoh in the template, this is a key in the hash, not the name of the hash itself (TT2 knows nothing about the name — the hashref could also be anonymous).  This isn't any different from using flat hashes to define/set TT2 variables, btw.

    The solution is to just wrap another hash around it, e.g. an anonymous one (in my example above I used a named one, $HoH):

    ... TmplParams => { item_hoh => \%item_hoh },

    The curlies create an anonymous hash(ref), and the value of the entry keyed by "item_hoh" is the ref to your hash %item_hoh.  The name of the latter is irrelevant.  In case you need to pass more top-level items (like the item_hoh), just add further entries in the anon hash.

      Wow, thank you so much for the lesson. I didn't know that. You have been incredibly helpful, and I can't thank you enough :)

      I'm so glad I can show this data in a clean table format!

      Thank you PerlMonk!!!

        You promised a free lunch.



        holli

        You can lead your users to water, but alas, you cannot drown them.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2015-07-04 08:26 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 (58 votes), past polls