Perl Template Toolkit
-
Upload
stefano-rodighiero -
Category
Technology
-
view
3.195 -
download
3
description
Transcript of Perl Template Toolkit
![Page 2: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/2.jpg)
nothing_particular.pl
#!/usr/bin/perl
print "Content-type:text/html\n\n";print "<html><head>";print "<title>Print Environment</title></head>";print "<body>”;
foreach $key (sort(keys %ENV)) { print "$key = $ENV{$key}<br>\n";}
print "</body></html>";
![Page 3: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/3.jpg)
Template
• Separano il codice applicativo dalla presentazione
• Facilitano il riuso del codice
• Ci sono n moduli su CPAN
• Evidentemente è una buona idea :-)
![Page 4: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/4.jpg)
Template Toolkit
• Dal sito statico...
• ...al CGI...
• ...all’applicazione Web
![Page 5: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/5.jpg)
ABC
![Page 6: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/6.jpg)
Un semplice esempio
[% convenevoli %],per [% festa %] vorrei ricevere [% dove %] un po' di LEGO.Riporto i codici delle confezioni che preferisco:
[% FOREACH item IN boxes %] * [% item %] [% END %]
[% captatio %]
Cordiali saluti,S.
![Page 7: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/7.jpg)
my $tt = Template->new();
my $vars = { convenevoli => "Caro Babbo Natale" , festa => "Natale" , dove => "sotto l'albero" , boxes => [ 7190, 897, 6880, 6990 ] , captatio => "Salutami le renne, eh? Ci tengo."};
$tt->process( 'letterina.tt2', $vars ) or die $tt->error();
Un semplice esempio/2
![Page 8: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/8.jpg)
my $tt = Template->new();
my $vars = { convenevoli => "Cara Befana" , festa => "l’Epifania" , dove => "nella calza" , boxes => [ 7190, 897, 6880, 6990 ] , captatio => "Spero che la schiena vada meglio."};
$tt->process( 'letterina.tt2', $vars ) or die $tt->error();
Un semplice esempio/3
![Page 9: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/9.jpg)
Passare oggetti 1 package Product::DBI; 2 use base 'Class::DBI'; 3 Url::DBI->set_db( Main => 'dbi:mysql:products', 4 '*** LOGIN ***', '*** PASSWORD ***' ); 5 6 package Product; 7 use base 'Product::DBI'; 8 Url->table( 'product' ); 9 Url->columns( All => qw/id description type price/ ); 10 11 package main; 12 13 # ... 14 my $template = Template->new(); 15 my $iterator = Product->retrieve_all(); 16 17 $template->process('list.tt2', { iterator => $iterator }) 18 or die $template->error;
![Page 10: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/10.jpg)
Passare oggetti/2
[% IF iterator.count == 0 %]Nessun prodotto<br />[% ELSE %] <table> [% WHILE (item = iterator.next) %] <tr> <td>[% item.id %]</td> <td>[% item.description %]</td> <td align="right">[% item.price %]</td> </tr> [% END %] </table>[% END %]
![Page 11: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/11.jpg)
www.perl.it
![Page 12: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/12.jpg)
Requisiti
• Facile rilocabilità
• Riuso di elementi già sviluppati
• Build locale
• Pubblicazione in un solo passo
• Riusabilità futura del codice sviluppato
![Page 13: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/13.jpg)
Soluzione
• Template Toolkit
• ttree
• Una manciata di moduli di CPAN
• Repository di template su CVS
![Page 14: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/14.jpg)
www.perl.it
![Page 15: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/15.jpg)
www.perl.it
![Page 16: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/16.jpg)
Widget
![Page 17: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/17.jpg)
Widget
[% WRAPPER wMessage.ttml wTopic = 'Documenti' wImg = 'img/gui/wd.gif' wAlt = 'D:' title = 'Perlfunc' subtitle = 'Funzioni Perl in italiano' icon = 'img/icons/faq.png' url = 'documenti/perlfunc/index.html'%]La documentazione completa delle funzioni Perl in italiano.[% END %]
![Page 18: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/18.jpg)
src = /home/larsen/src/perlit/srcdest = /home/httpd/perl.itlib = /home/larsen/src/perlit/librecurse
perl5lib = /home/larsen/src/perlit/libplugin_base = MyPlugin
accept = \.(html|css|txt|js)$copy = \.(gif|jpg|png|pl)$ignore = \.(swp)$pre_process = ./lib/config
Configurazione di ttree
![Page 19: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/19.jpg)
ttree
![Page 20: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/20.jpg)
Plugin
![Page 21: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/21.jpg)
package MyPlugin::Blog;
use strict;use warnings;
use Template::Plugin;use base qw/ Template::Plugin /;
use MT;use MT::Entry;
sub new { ... }
sub get_entry{ my $self = shift; my $entry_id = shift;
my $entry = MT::Entry->load( $entry_id );
return $entry;}
MyPlugin::Blog
![Page 22: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/22.jpg)
[% USE Blog %][% entry = Blog.get_entry( entry_id ) %]
<tbody><tr> <td class="text"> <p>[% entry.excerpt %] <a href="[% entry.permalink %]" title="Leggi tutto" target="_self" >Continua</a> </p> </td></tr></tbody>
MyPlugin::Blog in azione
![Page 23: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/23.jpg)
Mastering TT2
![Page 24: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/24.jpg)
Architettura
Template
Template::Service
Template::Context
Template::Document
Template::Provider
Template::Parser Template::Exception
Template::Stash
![Page 25: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/25.jpg)
use Template;use Template::Constants qw/ :debug /;
my $tt = Template->new( DEBUG => DEBUG_SERVICE | DEBUG_CONTEXT | DEBUG_PROVIDER );
$tt->process( 'template.tt2', { world => "Repubblica del Perl" } ) || die $tt->error();
Hello, [% world %]!
Architettura
![Page 26: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/26.jpg)
larsen@alice:~$ perl test.pl [Template::Provider] creating cache of unlimited slots for [ . ][Template::Service] process(template.tt2, HASH(0x832f75c))[Template::Context] template(template.tt2)[Template::Context] looking for block [template.tt2][Template::Context] asking providers for [template.tt2] [][Template::Provider] _fetch_path(template.tt2)[Template::Provider] searching path: ./template.tt2[Template::Provider] _load(./template.tt2, template.tt2)[Template::Provider] _compile(HASH(0x832f888), <no compfile>)[Template::Provider] _store(./template.tt2, Template::Document=HASH(0x8412128))[Template::Provider] adding new cache entry[Template::Service] PROCESS: Template::Document=HASH(0x8412128)[Template::Context] process([ Template::Document=HASH(0x8412128) ], <no params>, <unlocalized>)[Template::Context] template(Template::Document=HASH(0x8412128))Hello, Repubblica del Perl!larsen@alice:~$
Architettura
![Page 27: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/27.jpg)
Gli stessi princìpi del Perl
• Potenza
• Semplicità
• Disciplina
• Scalabilità
• Stile
![Page 28: Perl Template Toolkit](https://reader034.fdocuments.us/reader034/viewer/2022052410/54b78d624a795953368b45f2/html5/thumbnails/28.jpg)
Approfondimenti
• http://www.tt2.org
• Mailing list
• Perl Template Toolkit, O’Reilly
• perldoc Template