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 |