Mercurial > pub > Impl
diff Lib/IMPL/Web/QueryHandler/PageFormat.pm @ 136:f6af119ac741
url routines for templates
author | wizard |
---|---|
date | Fri, 25 Jun 2010 16:45:56 +0400 |
parents | 44977efed303 |
children | 6975cd4973d1 |
line wrap: on
line diff
--- a/Lib/IMPL/Web/QueryHandler/PageFormat.pm Thu Jun 24 02:39:00 2010 +0400 +++ b/Lib/IMPL/Web/QueryHandler/PageFormat.pm Fri Jun 25 16:45:56 2010 +0400 @@ -1,14 +1,18 @@ package IMPL::Web::QueryHandler::PageFormat; use base qw(IMPL::Web::QueryHandler IMPL::Object::Autofill); +use strict; __PACKAGE__->PassThroughArgs; use IMPL::Class::Property; use IMPL::Web::TT::Document; +use Template::Plugin::URL; use IMPL::Security::Context; use File::Spec; use Error qw(:try); +$Template::Plugin::URL::JOINT = '&'; + BEGIN { public property templatesCharset => prop_all; public property templatesBase => prop_all; @@ -34,12 +38,29 @@ $this->templatesBase($ENV{DOCUMENT_ROOT}) unless $this->templatesBase; - my $pathInfo = $ENV{PATH_INFO}; - my $prefixRoot = ""; + my ($requestUri) = split /\?/, $ENV{REQUEST_URI}; + + my $pathInfo; + + if ( $requestUri eq $ENV{SCRIPT_NAME}.$ENV{PATH_INFO} ) { + # CGI with path info + $pathInfo = $ENV{PATH_INFO}; + } else { + die "REQUEST_URI: $ENV{REQUEST_URI}\nPATH_INFO: $ENV{PATH_INFO}" unless $ENV{REQUEST_URI} eq $ENV{PATH_INFO}; + } + + my @root = (''); + my @base; + if (my $rx = $this->pathinfoPrefix) { - $pathInfo =~ s/($rx)//; - $prefixRoot = $1 if $1; + $requestUri =~ s/^($rx)//; + push @root, grep $_, split /\//, $1 if $1; } + + $pathInfo = $requestUri unless defined $pathInfo; + + @base = grep $_, split /\//, ($pathInfo ? substr $requestUri,0, -length($pathInfo) : $requestUri); + local $ENV{PATH_INFO} = $pathInfo || $this->defaultTarget; my @path = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("PATH_INFO is empty and no defaultTarget specified" ); @@ -50,8 +71,9 @@ $doc->LoadFile ( File::Spec->catfile($this->templatesBase,@path), $this->templatesCharset, $this->templatesBase ); $doc->AddVar( result => $nextHandler->() ); $doc->AddVar( app => $action->application ); - $doc->AddVar( absoluteUrl => sub { "$prefixRoot/$_[0]" } ); - $doc->AddVar( relativeUrl => sub { join '/', $prefixRoot, @pathContainer,$_[0] } ); + $doc->AddVar( absoluteUrl => sub { join '/', @root, $_[0] } ); + $doc->AddVar( baseUrl => sub { join '/', @root, @base, $_[0] } ); + $doc->AddVar( relativeUrl => sub { join '/', @root, @base, @pathContainer,$_[0] } ); { local $@; $doc->AddVar( user => IMPL::Security::Context->current->principal );