ZopeSkel Templates erstellen
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 zopeskel.base import var
from zopeskel.localcommands import ZopeSkelLocalTemplate
class ArchetypeSubTemplate(ZopeSkelLocalTemplate):
use_cheetah = True
parent_templates = ['archetype']
class Portlet(ArchetypeSubTemplate):
...
- 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 package_namespace, package_namespace2, package und package_dotted_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 /opt/python/2.6.6/lib/python2.6/site-packages/ZopeSkel-2.19-py2.6.egg/zopeskel/localcommands/templates/plone/portlet/
|-- configure.zcml_insert
|-- __init__.py_insert
|-- portlets
| |-- configure.zcml_insert
| |-- __init__.py_tmpl
| |-- +portlet_filename+.pt_tmpl
| `-- +portlet_filename+.py_tmpl
|-- profiles
| `-- default
| |-- metadata.xml_tmpl
| `-- portlets.xml_insert
`-- tests
|-- base_+portlet_filename+.py_tmpl
|-- __init__.py_tmpl
`-- test_+portlet_filename+.py_tmpl
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/portlet.xml_insert genauer an:
#<?xml version="1.0"?>
#<!-- This file is used to register new types of portlets. It can also
# be used to register completely new column types. See CMFPlone's version
# of this file for more information.
# -->
#<portlets>
# <!-- -*- extra stuff goes here -*- -->
<portlet
addview="${dotted_name}.${portlet_type_name}"
title="${portlet_name}"
description="${description}"
/>
#</portlets>
- Existiert in dem Projekt bereits eine Datei profiles/default/portlet.xml, dann werden nur die Zeilen hinzugefügt, die nicht mit # beginnen.
- Existiert noch keine profile/default/portlets.xml-Datei, wird die Datei aus dem Template ohne die mit # beginnenden Zeilen geschrieben.