--- trunk/WebPac.pm 2003/11/29 19:11:23 190 +++ trunk/WebPac.pm 2004/01/18 16:23:03 202 @@ -29,6 +29,7 @@ my $MIN_WILDCARD =$cfg_global->val('webpac', 'min_wildcard') || 1; my $TEMPLATE =$cfg_global->val('webpac', 'template'); my $UNAC_FILTER =$cfg_global->val('global', 'unac_filter'); +my $BASE_PATH =$cfg_global->val('webpac', 'base_path'); if ($UNAC_FILTER) { require $UNAC_FILTER; @@ -38,6 +39,36 @@ my $from_utf8 = Text::Iconv->new('UTF8', $CHARSET); +# use path from cgi script to support templates in subdirs +sub url_ex { + my $q = shift || die "suff2file needs CGI object!"; + my $tpl = shift || die "url_ex needs template name!"; + return suff2file($BASE_PATH, $q->url(-path => 1),$TEMPLATE_PATH,$tpl); +} + +sub suff2file($$$$) { + my ($base_path, $p, $path, $tpl) = @_; + + return $tpl if (! $base_path); + + # strip everything to and including base path, leaving only + # additional (virtual) path + if ($p =~ s,^.*?$base_path,,) { + $p =~ s,/*,,g; + my ($name,$ext) = split(/\./,$tpl); + $p = $name . $p . "." . $ext; + } else { + # if unable reset it! + $p = $tpl; + } + + if ( -e "$path/$p") { + return $p; + } else { + return $tpl; + } + +} sub setup { my $self = shift; @@ -55,15 +86,25 @@ } sub in_template { - my $html = shift || "This page is left unintentionally blank"; + my $q = shift || die "need CGI object!"; + my $html = shift || die "This page is left unintentionally blank"; return $html if (! defined($TEMPLATE)); - if (open(T, $TEMPLATE)) { + + my ($dir,$tpl); + if ($TEMPLATE =~ m,^(.*?/*)([^/]+)$,) { + ($dir,$tpl) = ($1,$2); + } else { + die "can't parse TEMPLATE path"; + } + + my $master_tpl = suff2file($BASE_PATH, $q->url(-path => 1),$dir,$tpl); + if (open(T, $master_tpl)) { my $template_html = join("\n",); close(T); $template_html =~ s/##webpac##/$html/gsi; return $template_html; } else { - return "Can't read template '$TEMPLATE'"; + return "Can't read template '$master_tpl'"; } } @@ -73,12 +114,12 @@ # Get the CGI.pm query object my $q = $self->query(); - my $tmpl = $self->load_tmpl('search.html'); + my $tmpl = $self->load_tmpl(url_ex($q,'search.html')); my $html = $tmpl->output; my $fif = new HTML::FillInForm; - return in_template($fif->fill(scalarref => \$html, fobject => $q, + return in_template($q,$fif->fill(scalarref => \$html, fobject => $q, target => 'search')); } @@ -171,7 +212,7 @@ push @s_arr, $q->param("f$i")."_swish".$exact."=(".join(" or ",@swish_q).")"; } - my $tmpl = $self->load_tmpl('results.html', global_vars => 1); + my $tmpl = $self->load_tmpl(url_ex($q,'results.html'), global_vars => 1); sub esc_html { my $html = shift; @@ -180,6 +221,12 @@ return $html; } + my $sort = 'swishrank'; + if ($q->param("sort")) { + $sort = 'headline'; + push @persist_vars, "sort"; + } + # call swish my $sh = SWISH->connect('Fork', prog => $SWISH, @@ -197,7 +244,8 @@ }, #startnum => 0, - maxhits => $MAX_HITS + maxhits => $MAX_HITS, + sortorder => $sort, ); die $SWISH::errstr unless $sh; @@ -259,7 +307,7 @@ my $html = $pager->output; - return in_template($html); + return in_template($q,$html); } sub show_index { @@ -282,13 +330,13 @@ my $total = $index->count($field,$limit); if (! $total) { - my $tmpl = $self->load_tmpl('no_index.html'); + my $tmpl = $self->load_tmpl(url_ex($q,'no_index.html')); $tmpl->param('field',$field); $html = $tmpl->output; return $html; } - my $tmpl = $self->load_tmpl('index_res.html', global_vars => 1); + my $tmpl = $self->load_tmpl(url_ex($q,'index_res.html'), global_vars => 1); $tmpl->param('field',$field); $tmpl->param('limit',$limit); $tmpl->param('total',$total); @@ -317,7 +365,7 @@ template => $tmpl, ); - return in_template($pager->output); + return in_template($q,$pager->output); } 1;