[Templates] isolating "USE DBI" in single common file?

Mark Anderson mda@discerning.com
Mon, 06 Oct 2003 02:38:45 -0700


I just started using TT, so I'm probably missing something basic....

If I put this in a single file:
[% USE DBI('DBI:CSV:f_dir=./tables;') %]
[% FOREACH row = DBI.query('SELECT * FROM tablename ORDER BY sortorder') %]
   ...

then i get the output i want.
but i don't want to have to have the "USE DBI" line in every individual
template file.

rather, i'd like to be able to INCLUDE or PROCESS a file like this:
  [%INCLUDE common]
  [% FOREACH row = DBI.query('SELECT * FROM tablename ORDER BY sortorder') %]
    ...
where file "common" has the line:
[% USE DBI('DBI:CSV:f_dir=./tables;') %]


but that doesn't work. i get the console warning:
Use of uninitialized value in join or string at /Library/Perl/darwin-thread-multi/DBI.pm line 1273.
and no rows are found.

However, if I put this in "common":
[% USE d = DBI('DBI:CSV:f_dir=./tables;') %]

and this in the template:
  [%INCLUDE common]
  [% FOREACH row = d.query('SELECT * FROM tablename ORDER BY sortorder') %]
    ...
Then it works.

Could someone explain what USE and SET do when they are used
across INCLUDE/PROCESS, which explains this behavior?

-mda