[cgiapp] Re: tiny refactoring (extract hard-coded HTML::Template name)

Mark Stosberg mark at summersault.com
Wed May 7 10:00:16 EDT 2008


Thanks for the contribution, Rhesa. Come feedback is below. 

On Wed, 07 May 2008 15:12:37 +0200
Rhesa Rozendaal <perl at rhesa.com> wrote:

> The diff (against 4.07_02) below extracts the hard-coded HTML::Template 
> classname from load_tmpl.
> 
> This should make it easier to drop in a replacement module, and it will 
> certainly simplify maintenance of both CGI::Application::Plugin::HTDot and 
> your CGI::Application::Plugin::HTCompiled, since you no longer have to 
> copy/paste the entire load_tmpl().

Opinions from others?

Considering how little load_tmpl() changes, I don't mind that this is solved
through plugins, which in this case are already written, and it would be clear
how to write yet another.

I know a lot of people are using CGI::App with Template::Toolkit or other
templating systems, so I'm hestitent to add an H::T specific method, when the
plugin approach is already established to address this.

However, I'm persuadable of there are other points of view of this. 

  Mark

> --- lib/CGI/Application.pm	2007-11-01 00:32:10.000000000 +0100
> +++ refactor/CGI/Application.pm	2008-05-07 15:07:31.000000000 +0200
> @@ -1412,7 +1412,11 @@ and features pre-and-post features, sing
>   L<CGI::Application::Plugin::Stream> can help if you want to return a stream and
>   not a file. It features a simple syntax and MIME-type detection.
> 
> +B<specifying the template class with html_tmpl_class()>
> 
> +If you have a template system that is API compatible to HTML::Template, it
> +may be enough to override C<html_tmpl_class()>. This method should return
> +the class name of your template system. The default simply returns
> +"HTML::Template".
> 
> 
> 
> @@ -1441,6 +1445,8 @@ Here's an example stub for a load_tmpl()
> 
>   =cut
> 
> +sub html_tmpl_class { 'HTML::Template' }
> +
>   sub load_tmpl {
>   	my $self = shift;
>   	my ($tmpl_file, @extra_params) = @_;
> @@ -1474,17 +1480,18 @@ sub load_tmpl {
> 
>       $self->call_hook('load_tmpl', \%ht_params, \%tmpl_params, $tmpl_file);
> 
> -    require HTML::Template;
> +    my $ht_class = $self->html_tmpl_class;
> +    eval "require $ht_class;";
>       # let's check $tmpl_file and see what kind of parameter it is - we
>       # now support 3 options: scalar (filename), ref to scalar (the
>       # actual html/template content) and reference to FILEHANDLE
>       my $t = undef;
>       if ( ref $tmpl_file eq 'SCALAR' ) {
> -        $t = HTML::Template->new_scalar_ref( $tmpl_file, %ht_params );
> +        $t = $ht_class->new_scalar_ref( $tmpl_file, %ht_params );
>       } elsif ( ref $tmpl_file eq 'GLOB' ) {
> -        $t = HTML::Template->new_filehandle( $tmpl_file, %ht_params );
> +        $t = $ht_class->new_filehandle( $tmpl_file, %ht_params );
>       } else {
> -        $t = HTML::Template->new_file($tmpl_file, %ht_params);
> +        $t = $ht_class->new_file($tmpl_file, %ht_params);
>       }
> 
>       if (keys %tmpl_params) {
> 
> 
> 
> #####  CGI::Application community mailing list  ################
> ##                                                            ##
> ##  To unsubscribe, or change your message delivery options,  ##
> ##  visit:  http://lists.openlib.org/mailman/listinfo/cgiapp    ##
> ##                                                            ##
> ##  Web archive:   http://lists.openlib.org/pipermail/cgiapp/   ##
> ##  Wiki:          http://cgiapp.erlbaum.net/                 ##
> ##                                                            ##
> ################################################################
> 
> 


-- 
 . . . . . . . . . . . . . . . . . . . . . . . . . . . 
   Mark Stosberg            Principal Developer  
   mark at summersault.com     Summersault, LLC     
   765-939-9301 ext 202     database driven websites
 . . . . . http://www.summersault.com/ . . . . . . . .




More information about the cgiapp mailing list