Re: Dynamic Templates with Petal

Jean-Michel Hiver <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.petal
Message-ID <[email protected]>
Warren Smith wrote:
> I'm having troubles getting dynamic includes to work. I'm trying to do
> something like this:
> 
> --- site.html
> <html>
>   ... header stuff ...
>     <div metal:use-macro="${content_template}#content"></div>
>   ... footer stuff ...
> </html>

Err... ouch - that's not going to work. TAL processing happens once the 
template has been compiled as a subroutine. METAL stuff is done at 
compile-time, and at that stage there is no context to take the value from.


I think the way you could do this would be defining a 'dyna_include' 
modifier, i.e. something like:


package Petal::Hash::Dyna_Include;
use base Petal::Hash::String;
use warnings;
use strict;

sub process
{
     my $self = shift;
     my $hash = shift;
     my $args = shift;

     # turns ${content_template}#content into what it should be
     my $template_name = $self->SUPER::process ($hash, $args);

     # process the template and returns the result
     my $template = new Petal ($template_name);
     return $template->process ($hash);
}


1;


__END__


Make sure your Dyna_Include file is somewhere in your @INC path, i.e. if 
you're having:

use lib ('.');

Then it should be in ./Petal/Hash/Dyna_Include.pm


Once you've done that, your template becomes:

<!-- structure keyword is here to avoid double-encoding -->
<div
   petal:content="structure dyna_include: ${content_template}#content">

Gimmick Mockup

</div>


This solution is untested, but it should work. Let me know how it goes...


Cheers,
Jean-Michel.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.