Erstellen eigener ZopeSkel- und local commands-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:
#<?xml version="1.0"?>
#<rolemap>
# <permissions>
# <!-- -*- extra stuff goes here -*- -->
<permission name="$add_permission_name" acquire="False">
<role name="Manager" />
<role name="Contributor" />
</permission>
# </permissions>
#</rolemap>
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.