Perl Template Toolkit

29
Perl Template Toolkit Stefano Rodighiero [email protected]

description

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

Transcript of Perl Template Toolkit

Page 1: Perl Template Toolkit

Perl Template Toolkit

Stefano [email protected]

Page 2: Perl Template Toolkit

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

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

Template Toolkit

• Dal sito statico...

• ...al CGI...

• ...all’applicazione Web

Page 5: Perl Template Toolkit

ABC

Page 6: Perl Template Toolkit

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

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

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

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

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

www.perl.it

Page 12: Perl Template Toolkit

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

Soluzione

• Template Toolkit

• ttree

• Una manciata di moduli di CPAN

• Repository di template su CVS

Page 14: Perl Template Toolkit

www.perl.it

Page 15: Perl Template Toolkit

www.perl.it

Page 16: Perl Template Toolkit

Widget

Page 17: Perl Template Toolkit

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

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

ttree

Page 20: Perl Template Toolkit

Plugin

Page 21: Perl Template Toolkit

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

[% 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

Mastering TT2

Page 24: Perl Template Toolkit

Architettura

Template

Template::Service

Template::Context

Template::Document

Template::Provider

Template::Parser Template::Exception

Template::Stash

Page 25: Perl Template Toolkit

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

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

Gli stessi princìpi del Perl

• Potenza

• Semplicità

• Disciplina

• Scalabilità

• Stile

Page 28: Perl Template Toolkit

Approfondimenti

• http://www.tt2.org

• Mailing list

• Perl Template Toolkit, O’Reilly

• perldoc Template

Page 29: Perl Template Toolkit

[email protected]://larsen.perlmonk.org

Grazie :)