The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

ASP4::MasterPage - Root class for MasterPage classes.

SYNOPSIS

In your ASP script (/eg-master.asp):

  <%@ MasterPage %>
  <html>
    <body>
      <h1><asp:ContentPlaceHolder id="heading">Default Heading</asp:ContentPlaceHolder></h1>
      <p>
        <asp:ContentPlaceHolder id="content">Default Content</asp:ContentPlaceHolder>
      </p>
    </body>
  </html>

It gets compiled down to:

  package MyApp::_eg_master_asp;

  use strict;
  use warnings 'all';
  no warnings 'redefine';
  use base 'ASP4::MasterPage';
  use vars __PACKAGE__->VARS;
  use ASP4::PageLoader;

  sub _init {
    my ($s) = @_;
    $s->{script_name} = q</eg-master.asp>;
    $s->{filename}    = q</home/john/Projects/www.example.com/htdocs/eg-master.asp>;
    $s->{base_class}  = q<ASP4::MasterPage>;
    $s->{compiled_as} = q<MyApp/_eg_master_asp.pm>;
    $s->{package}     = q<MyApp::_eg_master_asp>;

    return;
  }

  sub run {
  use warnings 'all';
  my ($__self, $__context) = @_;
  #line 1
  ;$Response->Write(q~
  <html>
    <body>
      <h1>~); $__self->heading($__context); $Response->Write(q~</h1>
      <p>
        ~); $__self->content($__context); $Response->Write(q~
      </p>
    </body>
  </html>
  ~);
  }

  sub heading {
  my ($__self, $__context) = @_;
  #line 4
  $Response->Write(q~Default Heading~);
  }# end heading

  sub content {
  my ($__self, $__context) = @_;
  #line 6
  $Response->Write(q~Default Content~);
  }# end content

  1;# return true:

Which, when executed, produces:

  <html>
    <body>
      <h1>Default Heading</h1>
      <p>
        Default Content
      </p>
    </body>
  </html>

But Wait - There's More!

MasterPages only get interesting when we add "child" pages to them:

(/eg-child.asp)

  <%@ Page UseMasterPage="/eg-master.asp" %>

  <asp:Content PlaceHolderID="heading">New Heading</asp:Content>

  <asp:Content PlaceHolderID="content">New Content</asp:Content>

Which compiles down to:

  package MyApp::_eg_child_asp;

  use strict;
  use warnings 'all';
  no warnings 'redefine';
  use base 'MyApp::_eg_master_asp';
  use vars __PACKAGE__->VARS;
  use ASP4::PageLoader;

  sub _init {
    my ($s) = @_;
    $s->{script_name} = q</eg-child.asp>;
    $s->{filename}    = q</home/john/Projects/www.example.com/htdocs/eg-child.asp>;
    $s->{base_class}  = q<MyApp::_eg_master_asp>;
    $s->{compiled_as} = q<MyApp/_eg_child_asp.pm>;
    $s->{package}     = q<MyApp::_eg_child_asp>;
    $s->{masterpage}  = ASP4::PageLoader->load( script_name => q</eg-master.asp> );
    return;
  }

  sub heading {
  my ($__self, $__context) = @_;
  #line 3
  $Response->Write(q~New Heading~);
  }# end heading

  sub content {
  my ($__self, $__context) = @_;
  #line 5
  $Response->Write(q~New Content~);
  }# end content

  1;# return true:

And when executed produces:

  <html>
    <body>
      <h1>New Heading</h1>
      <p>
        New Content
      </p>
    </body>
  </html>

And Even More!

Child pages can also be master pages:

(/eg-subpage.asp):

  <%@ MasterPage %>
  <%@ Page UseMasterPage="/eg-master.asp" %>

  <asp:Content PlaceHolderID="heading">New Heading</asp:Content>

  <asp:Content PlaceHolderID="content">
    New Content
    <span id="copyright">
      Copyright
      <asp:ContentPlaceHolder id="copyright"></asp:ContentPlaceHolder>: 
      All Rights Reserved
    </span>
  </asp:Content>

And inherited from again:

(/eg-subchild.asp):

  <%@ Page UseMasterPage="/eg-master.asp" %>

  <asp:Content PlaceHolderID="copyright">SuperMegaCorp, Inc.</asp:Content>

Which - when executed, produces:

  <html>
    <body>
      <h1>New Heading</h1>
      <p>
        
    New Content
    <span id="copyright">
      Copyright
      SuperMegaCorp, Inc.:
      All Rights Reserved
    </span>

      </p>
    </body>
  </html>

DESCRIPTION

MasterPages provide a means of rich page composition. This means that instead of a tangle of server-side includes, you can actually take advantage of this new concept (came out decades ago) called "class inheritance" - and apply it to your web pages.

BUGS

It's possible that some bugs have found their way into this release.

Use RT http://rt.cpan.org/NoAuth/Bugs.html?Dist=ASP4 to submit bug reports.

HOMEPAGE

Please visit the ASP4 homepage at http://0x31337.org/code/ to see examples of ASP4 in action.