Why not just create an AUTOLOAD parameter, and return your header, desired
application output, and footer from that function.
For example (untested, buyer beware),
$self->run_modes('AUTOLOAD' => 'header_body_footer');
sub header_body_footer {
my ($self, $rm, @rest) = @_;
...
return $self->props('header') . do_runmode($rm) . $self->props
('footer');
}
This circumvents some of the benefits of using C::A, but may work for your
purposes.
Brian
[EMAIL PROTECTED]
m To: [EMAIL PROTECTED]
cc:
06/10/02 06:08 Subject: [cgiapp] Subclassing form
PM
I'm just looking into CGI::Application, and after reading the pod and
viewing the code, I have two main questions...
(1) Should there be a NO_HEADERS and/or NO_OUTPUT (or similar) parameter
that the run() method takes? I ask for two reasons:
A. If I want to override the run method, for instance to print a
standard header/footer each time the app is run(), I would imagine that
it go like this:
package My::App;
use base 'CGI::Application';
sub new {
my $class = shift;
my $s = $class->SUPER::new(@_);
$s->param('header' => $s->load_tmpl('header_common.html'));
$s->param('footer' => $s->load_tmpl('footer_common.html'));
return $s;
}
sub run {
my $s = shift;
print $s->_send_headers(); # Shouldn't this be a public method?
# Print the head template
print $s->param('header');
# Now call C::A's run method...
$s->SUPER::run(NO_HEADERS=> 1);
# or maybe...
print $s->SUPER::run(NO_HEADERS=> 1, NO_OUTPUT => 1);
# or even....
$s->param('NO_HEADERS' => 1);
$s->SUPER::run();
# Now print the footer template
print $s->param('footer');
}
B. If I have a hierarchy of C::A objects, the second (or third, gasp)
won't need to print an HTTP header at all.
(2) Lastly, on the heels of #B above:
How do _you_ implement an app hierarchy?
An application has different modules (sectional groupings of
functionality.) Sales, Inventory, Reports, etc, each having it's own set
of run-modes, or even sub-modules with sub-run-modes. I'd like to use
the same URL for the whole shebang.
I envision the base app's run-mode being a param called "module" with a
value like "sales", then the base app can dynamically load the proper
'sub app' code and object, then that $subapp runs off with a second
traditional run-mode to do stuff.
Or should I just use run-mode values like:
'Parts_Save' or 'Jobs_List' or 'Reports_JobTotals'
Then I could use $app->prerun() to trim off the first part, load the
specified code library, then run prerun_mode to save the trimmed run-mode
back to app object.
Am I way off base?
TIA
Sebastian
---------------------------------------------------------------------
Web Archive: http://www.mail-archive.com/[email protected]/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
Web Archive: http://www.mail-archive.com/[email protected]/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]