[Catalyst] [PATCH] Catalyst::View::Mason : add render() method to
use several templates
José AUGUSTE-ETIENNE
jose.auguste-etienne at cgss-guyane.fr
Wed Jun 15 20:18:47 CEST 2005
Hello Catalysters,
First of all thanks for the great work.
I've discovered Catalyst a few days ago,
but as I could'nt find a solution to my problem using the released code,
I think that the attached patch may be useful to others.
I'm currently porting a Apache/HTML::Mason Webapp to Catalyst,
and I need to do something like this :
all pages share the same global page template,
let's call it 'page.mason',
and it looks like this
( snip HTML & CSS begin code ... )
<body>
<div id="left_margin">
<% $c->stash->{left_margin} %>
</div>
<div id="center">
<% $c->stash->{center} %>
</div>
<div id="right_margin">
<% $c->stash->{right_margin} %>
</div>
( snip HTML end code ... )
$c->stash->{left_margin}, $c->stash->{center},
$c->stash->{right_margin}, etc
are set via the page Controller,
by rendering specific templates
package MyApp::C::MyPage;
use strict;
use base 'Catalyst::Base';
sub begin : Private {
my ( $self, $c ) = @_;
unless ($c->stash->{my_app_config}) {
$c->stash->{my_app_config} = MyApp::M::Config->getConfig;
}
$c->forward('center');
}
sub center : Private {
my ( $self, $c ) = @_;
$c->stash->{template} = 'mypage_center.mason';
$c->stash->{center} = $c->forward(qw/MyApp::V::Mason render/);
$c->forward('right_margin');
}
sub right_margin : Private {
my ( $self, $c ) = @_;
$c->stash->{template} = 'mypage_right.mason';
$c->stash->{right_margin} = $c->forward(qw/MyApp::V::Mason render/);
$c->forward('left_margin');
}
sub left_margin : Private {
my ( $self, $c ) = @_;
$c->stash->{template} = 'mypage_left.mason';
$c->stash->{left_margin} = $c->forward(qw/MyApp::V::Mason render/);
}
sub default : Private {
my ( $self, $c ) = @_;
$c->stash->{template} = 'page.mason';
$c->stash->{title} = "My page";
$c->forward('MyApp::V::Mason');
}
I had to use a new method, because Catalyst::View::Mason::process()
defaults to render to $c->response->body,
and I didn't find an alternate way to avoid it.
please let me know if there is an alternate solution.
with this patch, Catalyst::View::Mason::render()
returns the result of the template processing,
instead of Catalyst::View::Mason::process(),
and Catalyst::View::Mason::process(),
renders the return value of Catalyst::View::Mason::render()
to $c->response->body
patch is against Rev 835
regards,
josé
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Catalyst-View-Mason.render.patch
Type: text/x-patch
Size: 1203 bytes
Desc: not available
Url : http://lists.rawmode.org/pipermail/catalyst/attachments/20050615/9ecb2fb3/Catalyst-View-Mason.render.bin
More information about the Catalyst
mailing list