Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Perl
Template
 Toolkit



Stefano Rodighiero
  larsen@perl.it
nothing_particular.pl
#!/usr/bin/perl

print   quot;Content-type:text/htmlnnquot;;
print   quot;<html><head>quot;;
print  ...
Template

• Separano il codice applicativo dalla
  presentazione

• Facilitano il riuso del codice
• Ci sono n moduli su C...
Template Toolkit

• Dal sito statico...
• ...al CGI...
• ...all’applicazione Web
ABC
Un semplice esempio
[% convenevoli %],
per [% festa %] vorrei ricevere [% dove %] un po' di LEGO.
Riporto i codici delle c...
Un semplice esempio/2
my $tt = Template->new();

my $vars = {
    convenevoli   =>   quot;Caro Babbo Natalequot; ,
    fes...
Un semplice esempio/3
my $tt = Template->new();

my $vars = {
    convenevoli   =>   quot;Cara Befanaquot; ,
    festa    ...
Passare oggetti
 1   package Product::DBI;
 2   use base 'Class::DBI';
 3   Url::DBI->set_db( Main => 'dbi:mysql:products'...
Passare oggetti/2
[% IF iterator.count == 0 %]
Nessun prodotto<br />
[% ELSE %]
    <table>
    [% WHILE (item = iterator....
www.perl.it
Requisiti

• Facile rilocabilità
• Riuso di elementi già sviluppati
• Build locale
• Pubblicazione in un solo passo
• Rius...
Soluzione

• Template Toolkit
• ttree
• Una manciata di moduli di CPAN
• Repository di template su CVS
www.perl.it
www.perl.it
Widget
Widget

[% WRAPPER wMessage.ttml
     wTopic   = 'Documenti'
     wImg     = 'img/gui/wd.gif'
     wAlt     = 'D:'
     ti...
Configurazione di ttree

src           = /home/larsen/src/perlit/src
dest          = /home/httpd/perl.it
lib           = /h...
ttree
Plugin
MyPlugin::Blog
package MyPlugin::Blog;

use strict;
use warnings;

use Template::Plugin;
use base qw/ Template::Plugin /;
...
MyPlugin::Blog in azione

[% USE Blog %]
[% entry = Blog.get_entry( entry_id ) %]

<tbody>
<tr>
  <td class=quot;textquot;...
Mastering TT2
Architettura
                          Template




                      Template::Service




Template::Provider    Temp...
Architettura
use Template;
use Template::Constants qw/ :debug /;

my $tt = Template->new( DEBUG => DEBUG_SERVICE
         ...
Architettura
larsen@alice:~$ perl test.pl
[Template::Provider] creating cache of unlimited slots for [ . ]
[Template::Serv...
Gli stessi princìpi del Perl

• Potenza
• Semplicità
• Disciplina
• Scalabilità
• Stile
Approfondimenti
• http://www.tt2.org
• Mailing list
• Perl Template Toolkit, O’Reilly
• perldoc Template
Grazie :)

    larsen@perl.it
http://larsen.perlmonk.org
Upcoming SlideShare
Loading in …5
×

Perl Template Toolkit

3,789 views

Published on

Template Toolkit 2: basic use, a success case, intro on plugin development

Published in: Technology
  • Be the first to comment

Perl Template Toolkit

  1. 1. Perl Template Toolkit Stefano Rodighiero larsen@perl.it
  2. 2. nothing_particular.pl #!/usr/bin/perl print quot;Content-type:text/htmlnnquot;; print quot;<html><head>quot;; print quot;<title>Print Environment</title></head>quot;; print quot;<body>”; foreach $key (sort(keys %ENV)) { print quot;$key = $ENV{$key}<br>nquot;; } print quot;</body></html>quot;;
  3. 3. Template • Separano il codice applicativo dalla presentazione • Facilitano il riuso del codice • Ci sono n moduli su CPAN • Evidentemente è una buona idea :-)
  4. 4. Template Toolkit • Dal sito statico... • ...al CGI... • ...all’applicazione Web
  5. 5. ABC
  6. 6. 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.
  7. 7. Un semplice esempio/2 my $tt = Template->new(); my $vars = { convenevoli => quot;Caro Babbo Natalequot; , festa => quot;Natalequot; , dove => quot;sotto l'alberoquot; , boxes => [ 7190, 897, 6880, 6990 ] , captatio => quot;Salutami le renne, eh? Ci tengo.quot; }; $tt->process( 'letterina.tt2', $vars ) or die $tt->error();
  8. 8. Un semplice esempio/3 my $tt = Template->new(); my $vars = { convenevoli => quot;Cara Befanaquot; , festa => quot;l’Epifaniaquot; , dove => quot;nella calzaquot; , boxes => [ 7190, 897, 6880, 6990 ] , captatio => quot;Spero che la schiena vada meglio.quot; }; $tt->process( 'letterina.tt2', $vars ) or die $tt->error();
  9. 9. 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;
  10. 10. 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=quot;rightquot;>[% item.price %]</td> </tr> [% END %] </table> [% END %]
  11. 11. www.perl.it
  12. 12. Requisiti • Facile rilocabilità • Riuso di elementi già sviluppati • Build locale • Pubblicazione in un solo passo • Riusabilità futura del codice sviluppato
  13. 13. Soluzione • Template Toolkit • ttree • Una manciata di moduli di CPAN • Repository di template su CVS
  14. 14. www.perl.it
  15. 15. www.perl.it
  16. 16. Widget
  17. 17. 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 %]
  18. 18. Configurazione di ttree src = /home/larsen/src/perlit/src dest = /home/httpd/perl.it lib = /home/larsen/src/perlit/lib recurse perl5lib = /home/larsen/src/perlit/lib plugin_base = MyPlugin accept = .(html|css|txt|js)$ copy = .(gif|jpg|png|pl)$ ignore = .(swp)$ pre_process = ./lib/config
  19. 19. ttree
  20. 20. Plugin
  21. 21. MyPlugin::Blog 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; }
  22. 22. MyPlugin::Blog in azione [% USE Blog %] [% entry = Blog.get_entry( entry_id ) %] <tbody> <tr> <td class=quot;textquot;> <p>[% entry.excerpt %] <a href=quot;[% entry.permalink %]quot; title=quot;Leggi tuttoquot; target=quot;_selfquot; >Continua</a> </p> </td> </tr> </tbody>
  23. 23. Mastering TT2
  24. 24. Architettura Template Template::Service Template::Provider Template::Context Template::Stash Template::Parser Template::Document Template::Exception
  25. 25. Architettura use Template; use Template::Constants qw/ :debug /; my $tt = Template->new( DEBUG => DEBUG_SERVICE | DEBUG_CONTEXT | DEBUG_PROVIDER ); $tt->process( 'template.tt2', { world => quot;Repubblica del Perlquot; } ) || die $tt->error(); Hello, [% world %]!
  26. 26. Architettura 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:~$
  27. 27. Gli stessi princìpi del Perl • Potenza • Semplicità • Disciplina • Scalabilità • Stile
  28. 28. Approfondimenti • http://www.tt2.org • Mailing list • Perl Template Toolkit, O’Reilly • perldoc Template
  29. 29. Grazie :) larsen@perl.it http://larsen.perlmonk.org

×