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

250Re: Templating suggestions?

Expand Messages
  • eamondaly
    Mar 27, 2002
      --- In apache-asp@y..., Joshua Chamas <joshua@c...> wrote:
      > Looking at your solution, I think I would probably do
      > something more like:
      >
      > <my:template href="/templates/simple.html" />
      > <my:header>Welcome back, <%= $Session->{'username'} %>!
      </my:header>
      > <my:body>
      > <!--#include file="foo.inc" -->
      > </my:body>
      > </my:template>
      >
      > This is a more natural use of the XMLSubs in my view, where
      > inner tags get executed before outer tags.

      I agree. I've changed my code to work like this.

      Of course, now I've run into a new roadblock. Can $Response->Redirect
      be called from within XMLSubs? I've no trouble with normal <% blocks
      and accessing objects like $Session, $Response, and such, but
      redirects seem to be a no go. I have a very simple page like so:

      <my:template href="/templates/simple.html">
      <my:body>
      <% $Response->Redirect('/bar.html'); print "WHEE!" %>
      Didn't redirect.
      </my:body>
      </my:template>

      Accessing the page results in no data:

      $ telnet 63.121.xxx.xxx 80
      Trying 63.121.xxx.xxx...
      Connected to 63.121.xxx.xxx (63.121.xxx.xxx).
      Escape character is '^]'.
      GET /env.html HTTP/1.1
      Host: xxx.fastweb.com

      Connection closed by foreign host.

      I added debug hooks to my::template and my::body-- looking at the
      error log, I see they're not even being called:

      [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
      Session_OnEnd 0fa9687de85bb7a63efa76e3be4a4a5a
      [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
      Application_OnEnd
      [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
      Application_OnStart
      [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
      Session_OnStart 09bd6388e1013e29a4522c21480c1669
      [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
      Script_OnStart /home/httpd/hosts/fastweb/jobs2/docs/env.html
      [Wed Mar 27 07:50:30 2002] [error] [asp] [6293] [debug] [env.html] -
      Script_OnEnd /home/httpd/hosts/fastweb/jobs2/docs/env.html

      At debug level -3, I can see the redirect is being called:

      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8886;0.0017] executing
      __ASP__xxx_env_htmlx4b2b5bcadbb7f3b32a28e389dcd5b4d7
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8892;0.0006] redirect called - location: /bar.html;
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8895;0.0003] parsed session into /bar.html?session-
      id=03d219b11e03c858407d8e4bce265b97
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8897;0.0002] new location after session query
      parsing /bar.html?session-id=03d219b11e03c858407d8e4bce265b97
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8900;0.0003] Script_OnEnd
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8902;0.0002] executing Script_OnEnd
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8904;0.0002] [env.html] -
      Script_OnEnd /home/httpd/hosts/fastweb/jobs2/docs/env.html
      [Wed Mar 27 07:53:50 2002] [error] [asp] [6333] [debug]
      [1017237230.8919;0.0015] ASP Done Processing - asp: Apache::ASP=HASH
      (0x838d090);

      but there's no output. I created a plain old ASP file like so:

      <% $Response->Redirect('/bar.html'); print "WHEE!" %>

      which worked just fine. Any ideas? Any other debugging info I can
      provide? I'm including my global.asa below.

      use File::Basename qw(basename);

      sub Session_OnStart {
      $Application->{'Session'.$Session->SessionID} = '?';
      $Response->Debug("Session_OnStart ". $Session->SessionID);
      }

      sub Session_OnEnd {
      my $t_session_active = time() - $Session->{onstart};
      $Application->{'Session'.$Session->SessionID} = $t_session_active;
      $Response->Debug("Session_OnEnd ". $Session->SessionID);
      }

      sub Application_OnStart {
      $Response->Debug("Application_OnStart");
      }

      sub Application_OnEnd {
      $Response->Debug("Application_OnEnd");
      }

      sub Script_OnStart {
      $ENV{'PATH'} = '/bin:/usr/bin';
      $Response->Debug("Script_OnStart $0");
      $Session->{Started}++;

      use vars qw(%var %db %error $input);
      %var = %db = %error = ();

      $input = $Request->Params;
      }

      sub Script_OnEnd {
      $Response->Debug("Script_OnEnd $0");
      $Session->{Ended}++;
      }

      sub Script_OnFlush {
      my $data = $Response->{BinaryRef};
      $Response->Debug("Script_OnFlush: about to flush ".length
      ($$data)." bytes to client");
      }

      $SIG{__DIE__} = \&Carp::confess;

      sub my::login {
      $Response->Debug("Entered my::login");
      my $args = shift;

      if ($args->{'type'} eq 'db-only') {
      # Check the db for the username
      }
      else {
      unless ($Session->{'login'} == 1) {
      my %param;
      $param{'URL'} = $ENV{'REQUEST_URI'};
      $Response->Redirect( $Server->URL('/login/index.html', \%
      param) );
      }
      }
      $Response->Debug("Exited my::login");
      }

      sub my::title {
      $Response->Debug("Entered my::title");
      shift;
      $var{'TITLE'} .= shift;
      $Response->Debug("Exited my::title");
      }

      sub my::header {
      $Response->Debug("Entered my::header");
      shift;
      $var{'HEADER'} .= shift;
      $Response->Debug("Exited my::header");
      }

      sub my::function {
      $Response->Debug("Entered my::function");
      shift;

      my $style;

      if ($var{'FUNCTION_COUNT'} == 0) {
      $style = 'border:1px solid #58B; background: #8BE';
      }
      elsif ($var{'FUNCTION_COUNT'} == 1) {
      $style = 'border:1px solid #69C; background: #9CF';
      }
      else {
      $style = 'border:1px solid #CCC; background: #FFF';
      }

      $var{'FUNCTIONS'} .= <<EOF;
      <tr>
      <td align="center" valign="center" height="150" style="$style">
      EOF

      $var{'FUNCTIONS'} .= shift;

      $var{'FUNCTIONS'} .= <<EOF;
      </td>
      </tr>
      <tr>
      <td><img src="/spacer.gif" height="1" width="1"></td>
      </tr>
      EOF

      $var{'FUNCTION_COUNT'}++;
      $Response->Debug("Exited my::function");
      }

      sub my::footer {
      $Response->Debug("Entered my::footer");
      shift;
      $var{'FOOTER'} .= shift;
      $Response->Debug("Exited my::footer");
      }

      sub my::body {
      $Response->Debug("Entered my::body");
      my $args = shift;
      $var{'BODY'} = shift;
      $Response->Debug("Exited my::body");
      }

      sub my::var {
      $Response->Debug("Entered my::var");
      my ($args, $data) = @_;
      $data =~ s/^\n//;
      $data =~ s/\n$//;
      $var{$args->{'name'}} = $data;
      $Response->Debug("Exited my::var");
      }

      sub my::template {
      $Response->Debug("Entered my::template");
      my ($args, $data) = @_;
      $var{'TITLE'} ||= $var{'HEADER'};
      $var{'TEMPLATE'} = $Server->MapPath($args->{'href'});
      $Response->Include($var{'TEMPLATE'});
      $Response->Debug("Exited my::template");
      }





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