Re: [Perl-widget-developer] Teambuilding Exercise #2: Usage - Template Toolkit concept
Status: Alpha
Brought to you by:
spadkins
|
From: Gunther B. <gu...@ex...> - 2001-06-11 04:33:59
|
At 11:09 AM 6/6/2001 -0400, Stephen Adkins wrote:
>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
What it sounds to me is that rather than hacking TT in a specific way for
widgets, TT would benefit a lot from a generic taglib hook.
In Java I am used to JSPs and we code widgets using taglibs. So the widgets
are objects, but then there is a widget taglib that can display a widget.
<widget id='fname'/>
in JSP parlance for example.
|