============================ ZopeSkel Templates erstellen ============================ Erstellen eigener ZopeSkel- und local commands-Templates. Erstellen eines *local command*-Templates ========================================= Die Python-Skripte zum Erstellen eines *local commands*-Templates entsprechen weitgehend denen eines normalen ZopeSkel-Templates. Wenn wir uns die ``Portlet``-Klasse in ``zopeskel/localcommands/archetype.py`` genauer anschauen, stellen wir fest, dass sie von ``ArchetypeSubTemplate`` abgeleitet wird und diese wiederum von ``ZopeSkelLocalTemplate``:: import os from templer.core.vars import var from templer.localcommands import TemplerLocalTemplate from Cheetah.Template import Template as cheetah_template class ArchetypeSubTemplate(TemplerLocalTemplate): use_cheetah = True parent_templates = ['archetype'] class ContentType(ArchetypeSubTemplate): _template_dir = 'templates/archetype/contenttype' summary = "A content type skeleton" ... ``use_cheetah`` Für *local commands* muss der Wert auf ``True`` gesetzt werden. ``parent_templates`` Liste der ZopeSkel-Templates, die dieses *local command*-Template aufrufen können. ``_template_dir`` Verzeichnis mit den Template-Dateien. ``summary`` Zusammenfassende Beschreibung des Templates. Die anschließend folgende ``pre``-Methode ermittelt die Variablen ``contenttype_classname``, ``contenttype_classname``, ``contenttype_classname``, ``contenttype_name`` und ``add_permission_name`` des übergeordneten Pakets. Auch die Template-Struktur entspricht weitgehend der von normalen ZopeSkel-Templates mit dem Unterschied, dass alle Dateien mit ``_insert`` enden. Betrachten wir uns z.B. das ``portlet``-Template genauer, entdecken wir folgende Struktur:: $ tree ~/.buildout/eggs/templer.plone.localcommands-1.0b1-py2.7.egg/templer/plone/localcommands/templates/archetype/contenttype/ /home/veit/.buildout/eggs/templer.plone.localcommands-1.0b1-py2.7.egg/templer/plone/localcommands/templates/archetype/contenttype/ ├── config.py_insert ├── content │ ├── configure.zcml_insert │ └── +content_class_filename+.py_tmpl ├── interfaces │ ├── +content_class_filename+.py_tmpl │ └── __init__.py_insert ├── profiles │ └── default │ ├── factorytool.xml_insert │ ├── rolemap.xml_insert │ ├── types │ │ └── +types_xml_filename+.xml_tmpl │ └── types.xml_insert └── README.txt_insert 5 directories, 10 files Die mit ``_tmpl`` endenden Dateien werden wie normale ZopeSkel-Templates behandelt. Speziell für **local command**-Templates sind die auf ``_insert`` endenden Dateien. Der Inhalt dieser Dateien wird in die korrespondierenden Dateien des bereits bestehenden Projekts eingefügt. Schauen wir uns nun z.B. ``profiles/default/rolemap.xml_insert`` genauer an:: # # # # # # - Existiert in dem Projekt bereits eine Datei ``profiles/default/rolemap.xml``, dann werden nur die Zeilen hinzugefügt, die nicht mit ``#`` beginnen. - Existiert noch keine ``profiles/default/rolemap.xml``-Datei, wird die Datei aus dem Template ohne die mit ``#`` beginnenden Zeilen geschrieben. Zum Weiterlesen =============== - `Creating your own Paster templates `_