package Text::MicroMason::ApacheHandler; use Apache::Constants; use Apache::Request; use Text::MicroMason::Base; ###################################################################### my %configs; sub handler ($$) { my ($package, $r) = @_; my $apache = Apache::Request->instance( $r ); my $file = $apache->filename; # $apache->document_root; my $syntax = $apache->dir_config('MicroMasonSyntax') || 'HTMLMason'; my @mixins = $apache->dir_config->get('MicroMasonMixins'); my @attrs = $apache->dir_config->get('MicroMasonAttribs'); my %seen; unshift @attrs, ( map "-$_", grep { ! $seen{$_} ++ } ( @mixins, $syntax ) ); my $config = join ' ', @attrs; my $mason = ( $configs{$config} ||= Text::MicroMason::Base->new( @attrs ) ); my $template = $mason->compile( file => $file ); $apache->content_type( 'text/html' ); # $apache->header_out(); local $Text::MicroMason::Commands::r = $apache; print $template->( $apache->param() ); return Apache::Constants::OK(); } sub configure { my $apache = Apache::Request->instance( shift ); my $file = $apache->filename; # $apache->document_root; my $syntax = $apache->dir_config('MicroMasonSyntax') || 'HTMLMason'; my @mixins = $apache->dir_config->get('MicroMasonMixins'); my @attrs = $apache->dir_config->get('MicroMasonAttribs'); my %seen; unshift @attrs, ( map "-$_", grep { ! $seen{$_} ++ } ( @mixins, $syntax ) ); my $config = join ' ', @attrs; my $mason = ( $configs{$config} ||= Text::MicroMason::Base->new( @attrs ) ); } ###################################################################### sub translate_params { MasonAllowGlobals => [ -AllowGlobals, allow_globals => \$1 ], MasonCompRoot => [ -TemplateDir, template_root => \$1 ], } ###################################################################### 1; __END__ ###################################################################### =head1 NAME Text::MicroMason::ApacheHandler - Use MicroMason from mod_perl =head1 SYNOPSIS In your httpd.conf or equivalent Apache configuration file: PerlModule Text::MicroMason::ApacheHandler SetHandler perl-script PerlHandler Text::MicroMason::ApacheHandler In your document root or other web-accessible directory: <% my $visitor = $r->connection->remote_host(); %> Hello there <%= $visitor %>! The time is now <%= localtime() %>. =head1 DESCRIPTION B This module is new, experimental, and incomplete. Not intended for production use. Interface subject to change. If you're interested in this capability, your feedback would be appreciated. =head2 Configuration The following configuration parameters are supported: =over 4 =item MicroMasonSyntax PerlSetVar MicroMasonSyntax HTMLMason Name of the syntax class that will compile the templates. Defaults to HTMLMason. =item MicroMasonMixins PerlAddVar MicroMasonMixins Safe PerlAddVar MicroMasonMixins CatchErrors List of additional mixin classes to be enabled. =item MicroMasonAttribs PerlAddVar MicroMasonAttribs "-AllowGlobals, allow_globals => '$r'" Allows for any set of attributes to be defined. Mixin names prefaced with a dash can also be included. =back =head1 SEE ALSO For an overview of this templating framework, see L. This is a mixin class intended for use with L. For distribution, installation, support, copyright and license information, see L. =cut