<& /comp/header.mas &> % if (defined $navigation) { % }
>

<& SELF:page-head &>

<% $body %>
<& /comp/footer.mas &> <%init> # $dbh is declared to be a Mason global in httpd.conf ("PerlSetVar # MasonAllowGlobals $dbh"). We open a database handler here so that it # is available to any other component that might want one. We also load # Apache::DBI in httpd.conf so database handles are transparently reused, # reducing startup costs. $dbh = DBI->connect('DBI:Pg:', $DB_USERNAME, $DB_PASSWORD, { RaiseError => 1 } ); # The contortions we go through here to get the body allow top level # components to redirect, send binary files, and/or abort should they # choose to do so, while still allowing them to die normally as well. # This also allows title/page-head/navigation methods in top level # components to do their intended jobs, too. This approach is based # on the documentation at: http://www.masonhq.com/?ScompAndAbort my $body; eval { $m->comp({ store => \$body }, $m->fetch_next, %ARGS) }; if (my $error = $@) { print $body if $m->aborted; die $error; } # An empty navigation component (such as the one in this autohandler) # still returns whitespace, which, for the purposes of choosing how to # layout the page, we interpret to mean there is no navigation. my $navigation = $m->scomp('SELF:navigation'); $navigation = undef if $navigation !~ /\S/; <%method title> <%init> # The page title will usually be the same as the page header, but any # anchor tags must be removed. my $title = $m->scomp('SELF:page-head'); $title =~ s{| [^>]*?>)}{}g; <% $title %> <%method page-head> Memphis Amiga Group (MAG) History <%method navigation>