Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

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 => '', To => $to, Cc => $cc, Subject => 'Bid Strategy System - Final Pricing Approval', Template => { html => '', }, 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.

Replies are listed 'Best First'.
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.


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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://946248]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2017-11-25 00:42 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (355 votes). Check out past polls.