Mit METAL beginnen

Dieses Dokument enthält eine Einführung in die Sprache METAL und die METAL Spezifikation 1.0. Dieses Dokument wurde mit Microsoft Word erstellt und mit WordXML automatisch in XML , HTML und HTMLHelp (.chm) konvertiert. Mit WordXML, dem Word-PlugIn der struktur AG, erweitern Sie Microsoft Word zu einem leistungsfähigen XML-Werkzeug.


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 Anweisungmetal: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 einemetal: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.