Re: [Perl-widget-developer] Teambuilding Exercise #2: Usage - Template Toolkit concept
Status: Alpha
Brought to you by:
spadkins
|
From: Stephen A. <ste...@of...> - 2001-06-06 15:03:26
|
At 09:53 AM 6/6/2001 -0400, Jay Lawrence wrote:
>
>Widgets in Template Toolkit - QED
>
>Here is something that I prototyped on my own system...
> - Just to show exactly how simple I'd like the widgets to appear to the
>template user ...
>
>General ideas:
> - Create hash of widgets: name => Widget::Object
> - Register this with Template::Toolkit somehow
> - two places come to mind - in the vars (as I have shown here)
> - At Template instantiation
> my $tt=Template->new ( { WIDGETS=>$widgetHashRef } );
> - Reference widgets solely by name
> - I do find the "wc." - "wc.widget" - a bit redundant but understand
>its purpose
> - instead we can beef up the _dotop sub of Stash to give us what we
>want!
> - Trained Stash to look for widgets by name and if found call their
>"display" method with any parameters supplied in the template
>
>
>testprg.pl
>-------------
>use Template;
>use Widget::Test;
>
>my $tt=Template->new( { INCLUDE_PATH=>"." } );
>
># Ya get yer vermin whereever u want - XML, SQL, FooBar
>$vars= {
> 'widgets' => {
> 'test1' => Widget::Test->new( maximum=>100, current=>10 )
> },
> 'lots' => 'o',
> 'more' => 'variables',
>};
>
>$tt->process("test.html", $vars) ||
> die "Failed: ".$tt->error()."\n";
Hmmm.
So the "widgets" entry in the stash becomes magic.
Seems unattractive because you need to modify the Template Toolkit itself.
But I every solution I can think of requires more steps in the Templates
page than
I'd like to see as well.
>--------------
>test.html
>--------------
>This is a test. <p>
>[% test1 %]
What do you see as the desirability of making the call program know about the
widgets vs. making the template know about the widgets?
I had envisioned some usage like...
[% USE wc = Widget %]
This is a test. <p>
[% wc.test1 %]
This would need some sort of Template Toolkit driver or a special controller
for Template Toolkit to make the syntax work out this way.
>--------------
>Patch to Template Toolkit 2.02 - Template/Stash.pm
>--------------
> if (defined($value = $root->{ $item })) {
> return $value unless ref $value eq 'CODE'; ## RETURN
> @result = &$value(@$args); ## @result
> }
># Whacked in widget handler
> if (defined $root->{ 'widgets' } && defined
>$root->{'widgets'}{$item}) {
> return $root->{'widgets'}{$item}->display(@$args);
> }
># /Whack
>
> elsif ($lvalue) {
> # we create an intermediate hash if this is an lvalue
> return $root->{ $item } = { }; ## RETURN
> }
>
This is an interesting option.
Please see if you can come up with a way which does not require us to
modify the Template Toolkit to specifically recognize a "magic" variable
in the stash.
Stephen
|