Deutsche Zope User Group
Gast 1 Benutzer online
DZUG-News

StructuredText in PageTemplates verwenden

In diesem Mini-Howto wird gezeigt, wie man in einer PageTemplate Vorlage abh�ngig von der template.id StructuredText ausgeben kann.

Ich hatte das Problem, das ich in einem PageTemplate einen Absatz mit StructuredText einbauen wollte. Nach einigem Probieren und Tipps aus dem DZUG-Chat in +dzug im IRC bin zu einer anderen L�sung gekommen.
Ich habe den StructuredText in eine weitere Datei ausgelagert (DTML-Document oder ZPT) und meine Vorlage so angepa�t, das sie den StructuredText ausgibt. Da ich ein fauler Mensch bin und ich die Ausgabe nur einmal coden wollte, mu�te ein wenig Luxus in das System.
Meine Vorlage �berpr�ft, ob eine Datei mit dem Namen ID des Templates + _stx existiert und versucht nur dann den StructuredText auszugeben.

Scripting

F�r die Ausgabe des StructuredText braucht man nur ein paar Zeilen ZPT-Code, die man am besten in seine Vorlage (Template) legt.

PageTemplate Vorlage

Diese Zeilen werden durch den Inhalt das StructuredText ersetzt.

    
StructuredText

Erkl�rung

PageTemplate

Das PageTemplate ist nicht sehr kompliziert. Zun�chst wird der Name der m�glichen STX-Datei mit tal:define="stx_file python: template.id + '_stx'" definiert. Da ich template.id anstatt here.id verwende, kann ich f�r jedes PageTemplate eine eigene STX-Datei verwenden. F�r die Folderansicht hei�t es dann eben index_html_stx

Als n�chstes wird �berpr�ft, ob im aktuellen Verzeichnis eine Objekt mit dem vorher definierten Namen existiert. Man kann an dieser Stelle nicht mit tal:condition="exists:stx_file" arbeiten, da dies per Acquisition auch alle Parentfolder durchsuchen w�rde. Stattdessen muss man hier mit objectIds() arbeiten.
Diese Funktion gibt eine Liste von String mit den IDs zur�ck. Mit stx_file in here.objectIds() �berpr�ft man, ob der Name in der Liste der IDs ist.

Mit python: modules['Products.PythonScripts.standard'].structured_text(getattr(here, stx_file)) wird die Methode structured_text() aufgerufen, die die Konvertierung von STX in HTML macht.. Durch getattr(here, stx_file) wird der Methode das Objekt �bergeben, da ein python:here.stx(stx_file) nur der Text stx_file �bergeben w�rde und nicht das Objekt stx_file.
Das structure am Anfang des tal:replace sorgt noch daf�r, das ZPT den Inhalt 1:1 einf�gt und nicht noch die HTML-Befehle quotet.

Weitere Informationen

Um diese Technik richtig verwenden zu k�nnen, sollte man die Ausgabe in seinem Metal-Macro machen.

Geschrieben von Tiran . Letzte �nderung 01.04.2003 22:10.