Schrift
[thread]636[/thread]

HTML::Template: SID an -fast- jeden Link anhängen



<< >> 5 Einträge, 1 Seite
bloonix
 2006-01-05 11:42
#6437 #6437
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hi, gibt es im HTML::... Sortiment ein Modul, mit dem man
Session IDs an fast jeden Link anhängen kann, wenn eine
SID gesetzt ist?

Ich finde es sehr mühselig, durch jedes Template zu huschen
und an jeden Link IF-VAR-/IF Tags zu hängen, was sehr
aufwendig werden kann, wenn sich eine Argumentenliste
erweitert ...
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
esskar
 2006-01-05 13:00
#6438 #6438
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
mach es anders.

Code: (dl )
1
2
3
4
if($sid) {
$tpl->param(SID => $sid);
$tpl->param(SID_PARAM => "sid=$sid");
}


im template

Code: (dl )
<a href="foo.bar?<TMPL_VAR NAME=SID_PARAM>;bar=foo">foo1</a>


somit ist es einfach ein parameter in der liste - und man brauchts sich nicht zu kümmern, ob $sid existiert oder nicht!
bloonix
 2006-01-05 14:15
#6439 #6439
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
genauso habe ich es bisher gemacht, nur wird es etwas
problematisch, wenn mehrere parameter zur liste hinzugefügt
werden müssen, denn die gesamte parameterliste ist
dynamisch.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a)
$param  = "foo=bar&amp;bar=foo";
$param .= "&amp;sid=$sid" if $sid && $param;
$param = "sid=$sid" if $sid && !$param;

$template->param(ARGV => $param);

<a href="foo.bar?<TMPL_VAR NAME="ARGV">">

b)
$template->param(ARGV => $param);
$template->param(SID = "sid=$sid");

<a href="foo.bar?<TMPL_IF NAME="ARGV"><TMPL_VAR NAME="ARGV"><TMPL_IF NAME="SID">&amp;<TMPL_VAR NAME="SID"></TMPL_IF><TMPL_ELSE><TMPL_VAR NAME="SID"></TMPL_IF>">

c)
<a href="foo.bar?<TMPL_IF NAME="ARGV"><TMPL_VAR NAME="ARGV">&amp;</TMPL_IF><TMPL_VAR NAME="SID">


An a) stört mich die Zuweisung ungemein.
An b) stören mich die vielen Template-Tags.
An c) stört mich das Trennzeichen &amp; in der Liste, das erscheint, wenn die SID nicht gesetzt ist, also

http://website/foo.bar?foo=bar&

Oder bin ich einfach nur zu penibel? :)\n\n

<!--EDIT|opi|1136463525-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
esskar
 2006-01-05 15:23
#6440 #6440
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub gen_param_list {
  my ($name, $value, $start) = @_;
  $start ||= "";

  return $start unless $name && $value;

  my $retVal = $start;
  if($retVal ne '') {
     $retVal .= ';' unless $retVal =~m{;$}; # mir gefallen "&amp;"'s nicht
  }

  $retVal .= "$name=$value";

  return $retVal;
}


PS: man müsste $name & $value noch uri-encodieren um sicher zu bleiben

aufruf

Code: (dl )
1
2
3
4
5
6
my $param = gen_param_list("foo", "bar");
$param = gen_param_list("sid", $sid, $param);

# usw

$template->param(ARGV => $param);
\n\n

<!--EDIT|esskar|1136467469-->
pq
 2006-01-05 16:06
#6441 #6441
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich würde sowieso alle parameter in einem hash aufbewahren und sie erst
zum schluß mit ; verketten.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 5 Einträge, 1 Seite



View all threads created 2006-01-05 11:42.