3. Template
• Separano il codice applicativo dalla
presentazione
• Facilitano il riuso del codice
• Ci sono n moduli su CPAN
• Evidentemente è una buona idea :-)
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. 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. 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. 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;
12. Requisiti
• Facile rilocabilità
• Riuso di elementi già sviluppati
• Build locale
• Pubblicazione in un solo passo
• Riusabilità futura del codice sviluppato
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;
}