METAL: macro e slot
medio
Zope è incentrato sugli oggetti e sul concetto di riusabilità del codice: 'riusare' significa fare il massimo col minimo, ridurre gli errori e i tempi di manutenzione delle applicazioni.
Una applicazione web mostra di solito un'interfaccia piuttosto ricca, ma basata su elementi ricorrenti: METAL offre la tecnologia necessaria a poter definire e richiamare tali elementi nei vari template che costituiscono la nostra interfaccia utente.
Le Macro
Una macro è una sezione di un template definita in modo da poter essere richiamata in altri template:
<p metal:definemacro="copyright">
Copyright 2001,
<em tal:content="here/author">
Zope.it</em>
</p>
Richiamando la macro copyright di questo template in un determinato punto di un altro template, si avrà l'espansione della macro in quel punto, come se in quel punto fosse definita.
Immaginiamo che il template precedente abbia il nome 'master'. La sua macro 'copyright' potrà essere richiamata dovunque se ne abbia bisogno:
<b metal:usemacro="container/master/macros/copyright">
Qui sarà espansa la macro
</b>
Questo secondo template avrà come risultato dopo il rendering qualcosa di simile a questo:
<p>
Copyright 2001,
<em>m.delmonte</em>
</p>
- NOTA!!
- guardate bene, il tag (b nel nostro caso) viene completamente sostituito, come se l'espansione della macro fosse applicata con un'istruzione replace.
Gli Slot
Uno slot è una sezione di una macro definita in modo da essere riempita nel momento in cui la macro viene espansa dal template che la richiama:
<div metal:definemacro="sidebar">
<h1>Links</h1>
<ul metal:defineslot="links">
<li>non ci sono link da mostrare.</li>
</ul>
</div>
In questo modo è possibile marcare all'interno della macro delle sezioni modificabili da parte del template che le utilizza.
Considerate che la macro precedente sia contenuta in un template chiamato 'doc1'. Un template che la richiama potrà usare lo slot per inserire i link che desidera come segue:
<div metal:usemacro="here/doc1/macros/sidebar">
<ul metal:fillslot="links">
<li><a href="http://linux.org”>Linux</a></li>
<li><a href="http://zope.org”>Zope</a></li>
</ul>
<div>
Nel momento in cui il template viene renderizzato si ottiene:
<h1>Links</h1> <ul> <li><a href="http://linux.org">Linux</a></li> <li><a href="http://zope.org">Zope</a></li> </ul>
Bene, non resta che augurarvi buon divertimento!
