Mit METAL beginnen
Mit METAL beginnen
Zuerst muß ein Page Template Dokument mit dem Name
‚mymacro’ erzeugt werden. Das Standarddokument sieht
ungefähr folgendermaßen aus:
<html>
<head>
<title tal:content=“template/title“>The
title</title>
</head>
<body>
<h2>
<span tal:replace=”here/title_or_id”>Titel oder Id
des Inhalts</span>
<span tal:condition=”template/title”
tal:replace=”template/title”> optionale Template
Id</span>
</h2>
This is Page Template <em
tal:content=”template/id”>Template Id</em>
</body>
</html>
Nun verändern wir das <html>-Tag wie
folgt:
<html
xmlns:tal= http://xml.zope.org/namespaces/tal
xmlns:metal= http://xml.zope.org/namespaces/metal
metal:define-macro=“master“>
Am Anfang mögen die ganzen XML-Namesräume etwas verwirrend erscheinen. Eigentlich können sie auch weggelassen werden und man schreibt:
Jetzt fangen wir an, Makros zu benutzen. Wir werden eine Navigationsleiste und eine Karteikartenansicht hinzufügen. Das Page Template wird geändert zu:
<html metal:define-macro=“master“>
<head>
<title tal:content=“template/title“>Der
Titel</title>
</head>
<body>
<table border=”1”>
<tr><td>Ich bin eine Navigationsleiste –
fügen Sie hier Links hinzu</td></tr>
<tr><td>
<h2>
<span tal:replace=”here/title_or_id”>Titel oder Id
des Inhalts</span>
<span tal:condition=”template/title”
tal:replace=”template/title”> optionale Template
Id</span>
</h2>
<div metal:define-slot=”main”>
Verwenden Sie innerhalb dieses Makros ein
‘fill-slot=”main”’-Attribut in einem Tag, wird das Tag den Text
ersetzen. Dies ist der Hauptrumpf. Er enthält alles.
</div></td></tr>
</table>
</body>
</html>
Über die Option ‚test’ kann man sich das Ergebnis ansehen. Um dieses Makro effektiv einzusetzen, muß es von einem anderen Page Template aus aufgerufen werden. Ein Page Template ‚use_mymacro’ würde ungefähr so aussehen:
<html
metal:use-macro=“here/mymacro/macros/master“>
<head>
<title tal:content=”template/title”>The
title</title>
</head>
<body>
<p metal:fill-slot=”main”>Ich weiß
nichts</p>
</body>
</html>
Ein wichtiger Tipp: Die ‚Expand Macros when Editing’-Option sollte nicht gewählt werden. Sonst werden alle Makros ausgedehnt und die klare Dokumentstruktur geht verloren. Vielleicht habe ich auch misverstanden, wie ‚Expand Macros ...’ arbeitet.
Wenn Sie das ‚use_mymacro’ Page Template testen,
werden Sie eine große Überraschung erleben: der Text „Ich weiß
nichts“ wird nicht angezeigt.
Wie auch immer, die Seite gibt einen das Verständnis dafür, was Sie als nächstes zu tun haben: Wenn Sie bei der Bearbeitung des Makros ein Tag mit einem ‚fill-slot=“main“’-Attribut eingeben, wird das Tag den Text ersetzen. Dies ist der ‚main’-Rumpf. Er enthält alles. In Ordnung, bearbeiten Sie das Makro so, daß es folgendermaßen aussieht:
<html
metal:use-macro=“here/mymacro/macros/master“>
<head>
<title tal:content=”template/title”>The
title</title>
</head>
<body>
<p metal:fill-slot=”main”>I know
something</p>
</body>
</html>
Zeit zu testen – viel Erfolg! Anstelle des statischen Contents im
-Tag können auch die Anweisungen ’tal:content’
oder ’tal:replace’ verwendet werden.
Ein paar Worte über Slots. Evan Simpson hat es wie folgt formuliert:
Man sollte Makros nur verwenden, wenn man die Möglichkeit haben will, Teile davon in Page Templates zu überschreiben, die das Makro verwenden. Um das zu tun, gibt man mit der Anweisung ’metal:define-slot’ in der Makrodefinition einem Tag ein Slot. Bei der Verwendung des Makros wird der Inhalt des Slots ganz normal mit dem Rest des Makros verwendet, solange, bis eine ’metal:fill-slot’-Anweisung unter dem Namen des Slots hinzugefügt wird. Die ‚metal:fill-slot’-Anweisung ersetzt das Slot-Tag aus der Makrodefinition vollständig, und zwar samt dem Namen des Tags und allen Attributen.






