[Catalyst] New Catalyst + TT problem
Bill Moseley
moseley at hank.org
Wed Dec 14 17:13:19 CET 2005
On Wed, Dec 14, 2005 at 11:12:27AM +0100, Albert Vila wrote:
> After upgrade to the last Catalyst version my custom TT view does not
> work propertly.
>
>
> I've solved the problem using the
> $c->stash->{additional_template_paths}. However, I think some people is
> using a similar solution to mine. Won't this option work anymore? I have
> to switch to the additional_template_paths variable?
I've avoided upgrading as it will break my code, too. I didn't think
it was that hard to alter the include path the old way.
The old code simply passed the include path to TT, so you could save a
reference to that array and change as needed.
The new system makes a copy of the INCLUDE_PATH first, so the array
passed to TT is not the same one as in INCLUDE_PATH -- so you can't
modify it per-request.
I'm not really following the code. When does new() get passed
$arguments and how do INCLUDE_PATH and DELIMITER get set in that case?
http://dev.catalyst.perl.org/file/trunk/Catalyst-View-TT/lib/Catalyst/View/TT.pm
Here's a patch to keep it backward compatible. It should be reviewed
as I wasn't clear about the $arguments being passed to new().
Index: lib/Catalyst/View/TT.pm
===================================================================
--- lib/Catalyst/View/TT.pm (revision 2686)
+++ lib/Catalyst/View/TT.pm (working copy)
@@ -249,22 +249,29 @@
sub new {
my ( $class, $c, $arguments ) = @_;
- my $delim = $class->config->{DELIMITER} || $arguments->{DELIMITER};
- my @include_path = _coerce_paths($arguments->{INCLUDE_PATH}, $delim);
- if(!@include_path){
- @include_path = _coerce_paths($class->config->{INCLUDE_PATH}, $delim);
+
+ my $include_path = $class->config->{INCLUDE_PATH};
+
+ unless ( ref $include_path eq 'ARRAY' ) {
+ my $delim = $class->config->{DELIMITER} || $arguments->{DELIMITER};
+ my @include_path = _coerce_paths($arguments->{INCLUDE_PATH}, $delim);
+ if(!@include_path){
+ @include_path = _coerce_paths($class->config->{INCLUDE_PATH}, $delim);
+ }
+ if(!@include_path){
+ my $root = $c->config->{root};
+ my $base = Path::Class::dir($root, 'base');
+ @include_path = ( "$root", "$base" );
+ }
+ $include_path = \@include_path;
}
- if(!@include_path){
- my $root = $c->config->{root};
- my $base = Path::Class::dir($root, 'base');
- @include_path = ( "$root", "$base" );
- }
+
my $config = {
EVAL_PERL => 0,
TEMPLATE_EXTENSION => '',
%{ $class->config },
%{$arguments},
- INCLUDE_PATH => \@include_path,
+ INCLUDE_PATH => $include_path,
};
# if we're debugging and/or the TIMER option is set, then we install
@@ -298,7 +305,7 @@
%{$config},
},
);
- $self->include_path(\@include_path);
+ $self->include_path($include_path);
$self->config($config);
return $self;
@@ -344,9 +351,9 @@
),
%{ $c->stash() }
};
-
- my @tmp_path = @{$self->include_path};
+
unshift @{$self->include_path}, @{$c->stash->{additional_template_paths}} if ref $c->stash->{additional_template_paths};
+
unless ( $self->template->process( $template, $vars, \$output ) ) {
my $error = $self->template->error;
$error = qq/Couldn't render template "$error"/;
@@ -354,8 +361,12 @@
$c->error($error);
return 0;
}
- @{$self->include_path} = @tmp_path if ref $c->stash->{additional_template_paths};
-
+
+ splice @{$self->include_path}, 0, scalar @{$c->stash->{additional_template_paths}}
+ if ref $c->stash->{additional_template_paths};
+
+
+
unless ( $c->response->content_type ) {
$c->response->content_type('text/html; charset=utf-8');
}
>
> Thanks.
>
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org
> http://lists.rawmode.org/mailman/listinfo/catalyst
>
--
Bill Moseley
moseley at hank.org
More information about the Catalyst
mailing list