Hi Jens!
jens hat geschrieben:Ich verstehe TAL nun etwas besser.
Das freut mich
jens hat geschrieben:Ehrlich gesagt, weiß ich nicht recht was METAL so genau ist

Es hat irgendwas mit Macros zu tun???
TAL fügt
dynamische Elemente (Variablen, Listen, ...) in den Text ein.
METAL fügt
Text in Text ein und generiert dadurch eine kombinierte Seitenvorlage.
Mit METAL kannst du dir z.B. eine
Haupt-Vorlage definieren. Diese Haupt-Vorlage kannst du dann von jeder Seite aus aufrufen.
In der Hauptvorlage definierst du so genannte
Slots, das sind Positionsangaben, die du von der aufrufenden Vorlage aus mit Text befüllen kannst. So kannst du genau definieren, wo dein Menü und wo dein Hauptbereich liegen soll.
METAL wird immer
vor TAL ausgeführt. Zuerst wird also mit Hilfe von METAL aus mehreren Seitenvorlagen (Haupt- und Seitenvorlage) eine einzige Vorlage. Diese wird dann mit TAL ausgeführt.
jens hat geschrieben:In PyLucid hab ich zwei verschiedene Ebenen in den Templates sinnvoll sind. TAL hatte ich erstmal nur für die internen-Seiten gedacht. Das sind quasi nur die dynamischen Teile der gesammt Seite.
Das finde ich super.
jens hat geschrieben:Die andere Ebene sind die Seiten-Templates für die gesammte HTML-Seite mit lucid-Tags für die Postition des Menü's <lucidTag:main_menu/> oder den Seiteninhalt <lucidTag:page_body/>...
Ich überlege, ob ich vielleicht auch diese Ebene mit TAL machen sollte...
[...]
Macht es Sinn das evtl. auch mit TAL zu machen???
METAL ist ideal dafür geeignet, eine komplette Website zu erstellen, da man einfach nur ein paar Vorlagen definiert und diese dynamisch mit Content befüllen kann. Das würde, glaube ich, dein komplettes pyLucid verändern. Ist es das Wert
Falls du aber doch deine Hauptvorlage mit METAL umsetzt, dann sind auch solche Spielereien möglich, wie z.B. das Verändern des STYLE-Tags im Head von jeder Seite aus.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import sys
from simpletal import simpleTAL, simpleTALES
main_template = \
"""<div metal:define-macro="master" tal:omit-tag=""><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-15" />
<!-- CSS-Slot BEGIN -->
<div metal:define-slot="css_slot" tal:omit-tag="">
</div>
<!-- CSS-Slot END -->
</head>
<body>
<table border="1" width="90%" align="center">
<tr>
<!-- Menü-Slot BEGIN -->
<td>
<div metal:define-slot="menu" tal:omit-tag="">
<b>Menü 1</b><br />
<b>Menü 2</b>
</div>
</td>
<!-- Menü-Slot END -->
<!-- Haupt-Slot BEGIN -->
<td>
<div metal:define-slot="main" tal:omit-tag="">
<p>
Hier steht der Haupttext.<br />
Hier steht der Haupttext.
</p>
</div>
</td>
<!-- Haupt-Slot END -->
</tr>
</table>
</body>
</html>
</div>
"""
page1_template = \
"""<html metal:use-macro="main_template/macros/master"
xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"
>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-15" />
<!-- Stylebereich BEGIN -->
<style metal:fill-slot="css_slot">
.abc {
color: Green;
}
</style>
<!-- Stylebereich END -->
</head>
<body>
<!-- Hauptbereich BEGIN -->
<p metal:fill-slot="main" class="abc">
Dieser Text ist jetzt grün.
</p>
<!-- Hauptbereich END -->
</body>
</html>
"""
page2_template = \
"""<div metal:use-macro="main_template/macros/master" tal:omit-tag>
<!-- Der Seitencontent muss nicht unbedingt eine gültige -->
<!-- HTML-Seite sein. -->
<!-- Stylebereich BEGIN -->
<style metal:fill-slot="css_slot">
.abc {
color: Red;
}
</style>
<!-- Stylebereich END -->
<!-- Hauptbereich BEGIN -->
<p metal:fill-slot="main" class="abc">
Dieser Text ist jetzt rot.
</p>
<!-- Hauptbereich END -->
</div>
"""
context = simpleTALES.Context(allowPythonPath = True)
main_template = simpleTAL.compileHTMLTemplate(main_template)
context.addGlobal("main_template", main_template)
print
print "SEITE 1 " * 5
print
page1 = simpleTAL.compileHTMLTemplate(page1_template)
page1.expand(context, sys.stdout)
print
print
print "SEITE 2 " * 5
print
page2 = simpleTAL.compileHTMLTemplate(page2_template)
page2.expand(context, sys.stdout)
jens hat geschrieben:EDIT: Hast du generell ein paar gute Links zum ThemaTAL???
http://dzug.org/dokumentation/entwicklung/zpt
Du musst beim Lesen nur bedenken, dass du keinen Zugriff auf zope-zypische Variablen wie z.B.
- container
- template
- context oder here
- request
- user
hast.
lg
Gerold
