Thread: Re: [htmltmpl] Trailing 1
Brought to you by:
samtregar
From: Barry M. <bmi...@th...> - 2007-04-16 21:49:56
|
You're right, that's not the exact code. I'm using CGI:Ajax in addition to HTML::Template. At first, I was using strictly CGI:Ajax and doing a $template->output; directly at the end of each sub. But, I wanted to be able to work with users that don't have JavaScript enabled or portable devices that don't support JS. Now, I return the $template->output and either print it (for AJAX) or assign it to a tmpl_var in the whole page template. Putting it into the page template as a TMPL_VAR doesn't show the 1. Only printing it after an AJAX call. It does happen with this code (stripped down version of my full script to save bandwidth): #!/usr/bin/perl -w use strict; use CGI; use CGI::Ajax; use HTML::Template; my $cgi = new CGI(); my $pjx = new CGI::Ajax('change_page' => \&change_page); print $pjx->build_html($cgi,\&Show_HTML); sub change_page { my $pg = $cgi->param('page'); print Show_Content($pg) if(defined $pg); } sub Show_HTML { my $template = HTML::Template->new(filename => "/var/www/localhost/htdocs/perlsite/index.tmpl"); my $content = ''; my $content_template = HTML::Template->new(filename => "/var/www/localhost/htdocs/perlsite/content/index.html"); $content = $content_template->output; $template->param(content => $content); return $template->output; } sub Show_Content { my $pg = shift; my $template = HTML::Template->new(filename => "/var/www/localhost/htdocs/perlsite/content/$pg.html") return $template->output; } |
From: Sam T. <sa...@tr...> - 2007-04-16 22:38:13
|
On Mon, 16 Apr 2007, Barry Michels wrote: > my $pjx = new CGI::Ajax('change_page' => \&change_page); I'm guess that CGI::Ajax is expecting you to return the HTML, not print it. So try changing this: print Show_Content($pg) if(defined $pg); To: return Show_Content($pg) if(defined $pg); When you put a print() as the last statement in a subroutine it will return 1 when it succeeds. -sam |
From: Barry M. <bmi...@th...> - 2007-04-16 22:57:58
|
That was it! Knew it was simple, but couldn't see it. Thanks! Sam Tregar wrote: > On Mon, 16 Apr 2007, Barry Michels wrote: > >> my $pjx = new CGI::Ajax('change_page' => \&change_page); > > I'm guess that CGI::Ajax is expecting you to return the HTML, not > print it. So try changing this: > > print Show_Content($pg) if(defined $pg); > > To: > > return Show_Content($pg) if(defined $pg); > > When you put a print() as the last statement in a subroutine it will > return 1 when it succeeds. > > -sam |
From: Karen <kar...@gm...> - 2007-04-16 22:43:35
|
On 4/16/07, Barry Michels <bmi...@th...> wrote: > > print $pjx->build_html($cgi,\&Show_HTML); This is going to print the result of the build_html... a nice successful 1, it appears. You might want to test the result, but you probably don't want to print anything on success. > sub change_page { > my $pg = $cgi->param('page'); > print Show_Content($pg) if(defined $pg); > } This is what prints the actual page. |