Thread Wunsch: HTML-Template-Compiled und Helferlein oder Makros (10 answers)
Opened by GwenDragon at 2013-09-06 17:28

GwenDragon
 2013-09-07 17:11
#169974 #169974
User since
2005-01-17
14760 Artikel
Admin1
[Homepage]
user image
2013-09-07T12:45:04 pq
eine subroutine, die die syntax des tags checkt.
Ah ja, praktisch.

2013-09-07T12:45:04 pq
du 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:
Code: (dl )
1
2
3
4
test
<%form name="test" method=post url=/bar.pl token="xsfrtoken" %>
Formular
<%/form %>
und mein Code:
Code (perl): (dl )
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:
Code: (dl )
1
2
3
4
5
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?
Code (perl): (dl )
1
2
3
4
5
6
7
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
Code (perl): (dl )
1
2
3
$htc->param(
  session => { xsfrtoken => $sec_token }
)
drin sind und im Template
Code: (dl )
token="z.xsfrtoken" %>
steht.


Stell ich mich wirklich zu sehr an? Oder wo kann ich den Stash noch auslesen?

View full thread Wunsch: HTML-Template-Compiled und Helferlein oder Makros