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. |