in reply to Re: Re: HTML::Template, DBI and <TMPL_LOOP>'s
in thread HTML::Template, DBI and <TMPL_LOOP>'s

The one thing that really "won me over" was the WRAPPER directive. I so want this feature in HTML::Template, but i fear that some heavy lifting will be required to add it ... anyways, WRAPPER allows you to contain a "header" and a "footer" in one file. This is incredibly useful. Imaging that you have a skeleton ... oh wait a second! I've already explained this once before to you at Re: HTML::Template question. :D

Go back and look at that example again. You may ask yourself, "well, there is a complete script for the H::T example, but where is the code for TT the example?" First, my apologies for not explaining ... second, try this:

  1. save the first template as skeleton.html
  2. save the two pages as page1.html and page2.html, respectively
  3. type tpage page1.html in your shell
If you have all the TT2 stuff installed correctly that should work just fine. Neat, eh?

If you want a skeleton Perl script to work with, try this one on for size:

use DBI; use Template; my $dbh = DBI->connect( ... ); my $sth = $dbh->prepare('select id,title from movie'); $sth->execute; my $movies = $sth->fetchall_arrayref({}); my $template = Template->new; $template->process(\*DATA, {movies => $movies}) or die $template->error(); __DATA__ <form> <select name="movies"> [% FOR movie = movies %] <option value="[% movie.id %]">[% movie.title %]</option> [% END %] </select> </form>
It is practically the same code, but the template is quite different. Where TT greater differs from H::T is when i refer to [% movie.title %] -- movie doesn't have to just be an anonymous hash reference in a list, it could be a full-blown object in a list. Likewise, title doesn't have to just be a hash key, it could be a method of a movie object as well!

I am completely sold on TT ... but it is slower and requires programmers who have quite a bit of experience with Templates in general. There are a lot of things that you can do in TT that you probably shouldn't. For example, here is another TT example:

use Template; my $template = Template->new; $template->process(\*DATA) || die $template->error(); __DATA__ [% USE DBI( ... ) %] <form> <select name="movies"> [% FOR movie = DBI.query('select id,title from movie') %] <option value="[% movie.id %]">[% movie.title %]</option> [% END %] </select> </form>

HTML::Template is simpler and faster, but TT is more fun and extremely powerful. ;)

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)