Loading ...
Sorry, an error occurred while loading the content.

239Re: Templating suggestions?

Expand Messages
  • eamondaly
    Mar 22, 2002
    • 0 Attachment
      Joshua Chamas, you're my hero.

      The key, of course, was the Script_OnStart event. Declaring %var
      there made $var{'TITLE'}, $var{'HEADER'}, $var{'BODY'}, etc.
      available to the page, its template, and its includes. You're a
      life-saver!

      For those curious, we ended up with the following:

      global.asa contains:

      sub Script_OnStart {
      use vars qw(%var);
      %var = ();
      }

      sub Script_OnEnd {
      $var{'TITLE'} ||= $var{'HEADER'};
      my $template_ref = $Response->TrapInclude($var{'TEMPLATE'});
      $main::Response->Write($$template_ref);
      }

      sub my::header {
      shift;
      $var{'HEADER'} .= shift;
      }

      sub my::template {
      my $args = shift;
      $var{'TEMPLATE'} = $Server->MapPath($args->{'href'});
      }

      sub my::body {
      my $args = shift;
      $var{'BODY'} = shift;
      }

      A typical page, foo.html, contains:

      <my:template href="/templates/simple.html" />

      <my:header>
      Welcome back, <%= $Session->{'username'} %>!
      </my:header>

      <my:body>
      <!--#include file="foo.inc" -->
      </my:body>

      And simple.html contains all the pretty formatting like so:

      <html>
      <head><title><%= $var{'TITLE'} %></title></head>
      <body>
      <h1><%= $var{'HEADER'} %></h1>
      <%= $var{'BODY'} %>
      </body>
      </html>

      The really great thing is that code can be added anywhere: to
      foo.html, simple.html, to their includes, in the subs-- it's
      ridiculously flexible. Plus, it's pretty similar to our existing
      module, which means I won't have a tough time retraining my staff.

      > I have long wanted to build support for easier variables
      substitution
      > where one could do this:
      >
      > PerlSetVar QuickVars 1
      >
      > sub Script_OnStart {
      > $Vars->{DATA} = 1;
      > }
      >
      > Then in the ASP script, PHP quick variables would be supported like:
      >
      > <% for(1..10) { %>
      > $DATA
      > <% } %>
      >
      > $DATA would be pulled from $Vars->{DATA} automatically at runtime.
      > I think this would be a worthwhile extension to Apache::ASP since
      > <%= $Vars->{DATA} %> type templates can be unwieldy for HTML
      developers.

      That's pretty much exactly how we do it:

      s/\$(\w+)/(exists $var{$1}) ? $var{$1} : "\$$1" /seg;

      We also have some special hashes, like %input and %db, which simplify
      development:

      s/\$input{'(\w+)'}/(exists $input{$1}) ? $input{$1} : "\$$1" /seg;

      Seems like we could just pop that into Script_OnEnd.

      Anyway, thanks again, Joshua. This stuff is great.


      ---------------------------------------------------------------------
      To unsubscribe, e-mail: asp-unsubscribe@...
      For additional commands, e-mail: asp-help@...
    • Show all 6 messages in this topic