NAME

CGI::Application::Plugin::Mason - HTML::Mason plugin for CGI::Application

VERSION

1.00

SYNOPSIS

package YourApp;

use strict;
use base qw(CGI::Application);
use CGI::Application::Plugin::Stash; # require!
use CGI::Application::Plugin::Mason;

# cgiapp_init
sub cgiapp_init {
  my $self = shift;
  $self->interp_config( comp_root => "/path/to/root", data_dir => "/tmp/mason" );
}

# runmode
sub start {
  my $self = shift;

  # Catalyst like
  $self->stash->{name} = "kurt";
  $self->stash->{age}  = 27;
  # template path
  $self->stash->{template} = "/start.mason";
  return $self->interp_exec;
}

# start.mason
<%args>
$name
$age
</%args>
<html>
<head>
<% # $c is YourApp object %>
<title><% $c->get_current_runmode %></title>
</head>

<body>
name : <% $name | h %><br>
age : <% $age | h %>
</body>
</html>

DESCRIPTION

CGI::Application::Plugin::Mason is Plug-in that offers HTML::Mason template engine.

METHOD

interp_config

Initialize HTML::Mason::Interp method.

Option:

comp_root          : HTML::Mason root dir(default: Cwd::getpwd value)
data_dir           : HTML::Mason cache and object file directory(default: /tmp/mason)
template_extension : template extension(default: .mason)

Example:

sub cgiapp_init {
  my $self = shift;
  $self->interp_config( comp_root => "/path/to/comp_root", data_dir => "/tmp/mason" );

  # When pass other HTML::Mason option
  $self->interp_config(
                      comp_root            => "/path/to/comp_root",
                      default_escape_flags => [ "h" ],
                      autohandler_name     => "autohandler",
                      );
}

interp

HTML::Mason::Interp object wrapper

Example:

# HTML::Mason::Interp#set_escape
$self->interp->set_escape( uc => sub { ${$_[0]} =~ tr/a-z/A-Z/ } );
# HTML::Mason::Interp#comp_root
my $comp_root = $self->interp->comp_root;

interp_exec

Return HTML::Mason::Interp#exec result.

The specification of the template file

Example:

# file name
$self->stash->{template} = "/template.mason"
# file handle
open my $fh, "/path/to/template.mason" or croak("can not open file");
$self->stash->{template} = $fh;
# scalarref
$self->stash->{template} = \q{<%args>$name</%args> my name is <% $name %>};

default template name is /package_name/runmode_method_name . ${template_extension}

Example:

 # ex1
 package MyApp;
 sub start {
   my $self = shift;
   do something...

   # The file passing used at this time is /MyApp/start.mason
   return $self->interp_exec;
 }

 # ex2
 package My::App;
 sub start {
   my $self = shift;
   do something...

   # The file passing used at this time is /My/App/start.mason
   return $self->interp_exec;
 }

Specification of variable allocated in template

Example:

# ex1
sub start {
  my $self = shift;
  # stash method setting
  $self->stash->{name} = "kurt";
  $self->stash->{age}  = 27;
  return $self->interp_exec;
}

# ex2
sub start {
  my $self = shift;
  # interp_exec param setting
  return $self->interp_exec( name => "kurt", age => 27 );
}

interp_pre_exec

Trigger method before interp_exec. the argument is $temlate, and $arg.

$template : $self->{template} value
$args     : $self->{stash} or $self->interp_exec args hashref

Example:

sub interp_pre_exec {
  my($self, $template, $args) = @_;
  $args->{newval} = "interp_pre_exec setting value!";
}

# or

$self->add_callback("interp_pre_exec", sub {
  my($self, $template, $args) = @_;
  $args->{newval} = "interp_pre_exec setting value!";
});  

interp_post_exec

Trigger method after interp_exec. the argument is $bodyref.

$bodyref : content value scalarref

Example:

sub interp_post_exec {
  my($self, $bodyref) = @_;
  ${$bodyref} = encode("shiftjis", decode("utf8", ${$bodyref}));
}

# or

$self->add_callback("interp_post_exec", sub {
  my($self, $bodyref) = @_;
  ${$bodyref} = encode("shiftjis", decode("utf8", ${$bodyref}));
});  

PRIVATE METHOD

_get_interp_template_path

Get default template path.

SEE ALSO

CGI::Application CGI::Application::Plugin::Stash HTML::Mason

AUTHOR

Akira Horimoto

COPYRIGHT AND LICENSE

This library is free software. You can redistribute it and/or modify it under the same terms as perl itself.

Copyright (C) 2007 Akira Horimoto