[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