2013-09-07T12:45:04
pqeine subroutine, die die syntax des tags checkt.
Ah ja, praktisch.
2013-09-07T12:45:04
pqdu musst jedes attribut registrieren, das vorkommen könnte.
als template-autor einen beliebigen attributnamen ausdenken, der nicht registriert ist, das geht nicht.
Ach so. Ich wollte mal wieder viel zu viel Zauberei.
Aber ok, HTML/XML hat ja auch feste Definitionen, welche Attribute vorkommen können.
Dann werde ich in der DTD von HTML4 nachsehen müssen und die Attribute einbinden.
Wie ist das eigentlich, wie komme ich aus einem Plugin an den Stash des HTC-Objekts? Es geht mir darum nämlich Werte einer Variablen einzusetzen.
Wenn also das Template wie folgt ist:
test
<%form name="test" method=post url=/bar.pl token="xsfrtoken" %>
Formular
<%/form %>
und mein Code:
1
2
3
4
5
6
7
8
9
10
11
12
use 5.010;
use HTML::Template::Compiled;
use HTCForm;
my $form = HTCForm->new;
my $sec_token = 'xyz0xgdtz256hdfrashwe5625xh';
my $htc = HTML::Template::Compiled->new(
filename => "form.html",
plugin => [$form],
debug => 1,
);
$htc->param( xsfrtoken => $sec_token );
say $htc->output;
soll dann ergeben:
test
<form name="test" method="post" action="/bar.pl">
Formular
<input type="hidden" name="TOKEN" value="xyz0xgdtz256hdfrashwe5625xh">
</form>
Ein ack auf die Source enthüllt mir:
C:\strawberry\perl>ack get_var
site\lib\HTML\Template\Compiled\Classic.pm
12:sub _get_var_global_sub {
site\lib\HTML\Template\Compiled\Compiler\Classic.pm
44: "\$t->_get_var_global_sub(" . '$P,$$C,0,'."[undef,'$var'])";
site\lib\HTML\Template\Compiled.pm
991:# '$t->get_var($P, $$C, 1, [PATH_DEREF, 'key'])'
992:# the get_var method walks the paths given through the data structure.
994:# parameter hash. the third argument to get_var is 'final'.
Wenn ich also den Wert einer beliebigen Variablen im Stash haben möchte wäre das dann so?
elsif ($def =~/^\w+$/) {
$expression .= <<"EOM";
$OUT '<input type="hidden" name="$def" value="'
. \$t->_get_var_global_sub(\$P,\$\$C,0,[undef,'$def'])
. '">';
EOM
}
Aber _get_var_global_sub existiert ja nur in HTC::Classic.
Und ich komme auch nicht an Werte, die im Stash so verschachtelt
$htc->param(
session => { xsfrtoken => $sec_token }
)
drin sind und im Template
steht.
Stell ich mich wirklich zu sehr an? Oder wo kann ich den Stash noch auslesen?