METAL: le macro in PHPTal

di: Gabriele Farina     25 Gennaio 2007

In questa sede abbiamo già parlato di PHPTal e della semplicità e potenza di questa libreria che permette di utilizzare in PHP il famoso template system di Zope. L'autore della libreria non si è comunque limitato ad effettuare il porting della libreria di base e, per completezza, ha incluso anche i namespace ed i plugin aggiuntivi che hanno reso questo strumento una delle alternative più interessanti nell'ambito dei template engine.

METAL è uno di questi namespace e permette di aggiungere ai propri template il supporto per le macro. Le macro si comportano in modo molto simile alle funzioni; sono blocchi di codice TAL che possono essere richiamati da altre template e possono accettare dei parametri in ingresso.

Gli attributi di metal

Il namespace Metal aggiunge alcuni attributi molto interessanti a TAL, analizziamoli in dettaglio con qualche esempio:

metal:define-marco

Come già facilmente deducibile dal nome, questo attributo è semplicemente utilizzato per dichiarare una macro. Come già accennato in precedenza una macro è come una funzione o, più contestualmente un blocco di template, che è possibile richiamare in altre sedi senza doversi preoccupare di ripetere ogni volta il codice scritto ottenendo una buona riduzione delle operazioni ripetitive. Le macro ereditano le variabili utilizzabili dal contesto in cui sono richiamate.

<div metal:define-macro="user_box">
    <ul>
        <li tal:content="user/username">Username</li>
        <a href="/edit_user">Modifica utente</a>
    </ul>
    <div>
    Ultimo accesso: <span tal:content="user/last_access">Data dell'ultimo accesso</span>
    </div>
</div>

Quando l'engine di PHPTal incontra un tag che contiene l'attributo metal:define-macro non effettua il rendering del codice in esso contenuto ma si limita a salvarlo in memoria in modo che sia possibile richiamarlo successivamente all'interno del template.

metal:use-macro

Con questo attributo si utilizza una macro definita in precedenza attraverso metal:define-macro. Il contenuto della macro richiamata viene quindi incluso come contenuto del tag che richiama la macro. L'attributo metal:use-macro accetta come valore il nome della macro da richiamare; è possibile anche richiamare macro definite in altri file utilizzando come valore il nome del file da cui recuperare la macro seguito da uno slash ('/')e dal nome della macro stessa.

<!--
Presupponiamo che alla template sia assegnato l'array user che
contiene i dati sull'utente corrente
-->

<div metal:define-macro="menu">
    <ul>
        <li><a href="#">Item 1</a></li>
        <li><a href="#" tal:content="custom_item">Item 2</a></li>
    </ul>
</div>

<div metal:use-macro="macros.html/user_box" />
<div tal:define="custom_item string:voce custom"
metal:use-macro="menu" />

Ovviamente il valore dell'attributo può anche contenere delle variabili, richiamate usando la shortcut dell'operatore path: (${ ... }) che abbiamo visto nell'articolo precedente.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti