Buddy,
One solution to this might be to make a single file that has nothing but your shared BLOCKs in it. Then use Template Toolkit's ability to use default variables like so:
my %vars = ( standard_include => 'some_include_file.tt2' );
$tt->process('my_template.tt2/bar', \%vars)Then at the top of your pages (ie. my_template.tt2) use:
[% PROCESS $standard_include | null %]
The process should import the blocks into your page. Also, this solves the problem of you renaming an include file, because you do it from one central location.
NOTE: I didn't test this to see if it would work, and I wrote it off the top of my head. ;)
-- Josh
Buddy Burden wrote:
Randal,
But once loaded, it's cached in memory.
Sure. I'm not worried about the speed issue.
[% PROCESS my_template.tt2 | null %]
would even ensure that the non-block output didn't interfere.
That's not _exactly_ what I need, but I wonder if I could leverage that somehow ...
Buddy> But I need to do this from the code,
as in $tt->process('bar') ?
Right. Only, it's actually $tt->process('my_template.tt2/bar') (which of course only works when EXPOSE_BLOCKS is true). But I think I've failed to explain my problem sufficiently. At the risk of being long-winded, let me try again.
Let's say I have a web page. My web page is named "fred". The "fred" page is divided into 4 squares: let's call them foo, bar, baz, and ... whatever comes after baz. <g> All 4 of these squares relate to the same thing (i.e. fredness). But they capture individual aspects of fredness that can be operated on by the web sufer separately. Now, I use OpenThought (which is basically just carefully controlled Javascript) to allow me to change each square individually (e.g. in response to some user input) without having to refresh the whole page. That's what I'm shooting for.
The implementation of this, so far, is a template called fred.tt2, which contains BLOCKs named foo, bar, baz and whatever-that-last-one-is. Of course, fred.tt2 contains some other stuff too: at the very least the containing table which holds the separate squares. When I want to load the page the first time, I process fred.tt2. When I want to refresh only foo based on some user input, I process fred.tt2/foo. All is well with the world.
But let's further say that there's some common thing that _all_ the squares have to do, perhaps display errors in a common format. So I make a new BLOCK called display_error. Now, if I need to display an error when I first load the page (i.e. while processing fred.tt2), that's all fine and well. But if I need to display the error when refreshing the foo square (i.e. while processing fred.tt2/foo), I have a problem. If the display_error BLOCK isn't inside the foo BLOCK, I can't call it. If the display_error BLOCK _is_ inside the foo BLOCK, I've solved it for foo, but I have the same problem for bar et al. I could give display_error its own template--say, display_error.tt2--but this is a slippery slope which leads to lots of lots of little templates and my HTML designer complaining that she can never find anything. I could always use [% PROCESS fred.tt2/display_error %] inside BLOCK foo and its pals, but then I've encoded the name of the template into the code and every time I rename a file, or move it into a different directory, I've got to hunt down a million places to change (so far, this solution is probably the best of a bad lot, unless anybody else has a better suggestion).
Hopefully that makes more sense.
-- Buddy
_______________________________________________ templates mailing list [email protected] http://lists.template-toolkit.org/mailman/listinfo/templates
!DSPAM:422a1d6f100581437142787!
_______________________________________________ templates mailing list [email protected] http://lists.template-toolkit.org/mailman/listinfo/templates
