Dynamische Standardwerte

Beschreibung

PloneFormGen erlaubt die Berechnung von Standardwerten aus TALES- oder Python-Ausrücken im Überschreiben-Reiter eines jeden Feldes. Damit ist es z.B. möglich, automatisch die E-Mail-Adresse des jeweiligen Nutzers in das Formularfeld einzusetzen.

Die Template Attribute Language Expression Syntax (TALES) ist eine einfache Notation für Werte über einen Pfad, eine Zeichenkette oder einen Python- Ausdruck. In dieser Anleitung werden wir jedoch keine Einführung in TALES geben. Diese finden Sie in unserem Plone-Entwicklerhandbuch: TALES.

Kontextvariablen

Sie können die folgenden TALES-Kontextvariablen verwenden:

here

Das aktuelle Objekt.

here/memberEmail
gibt die E-Mail-Adresse des aktuellen Nutzers aus.
folder

Der aktuelle Formularordner.

folder/getEmail
gibt Ihnen z.B. die E-Mail-Adresse des Formularordners zurück.
folder_url
Die URL des Formularordners
portal
Die Plone-Site
portal_url
Die URL der Plone-Site.
request
Das REQUEST-Objekt.
member

Die Daten des angemeldeten Nutzers.

member/id
gibt die ID des angemeldeten Nutzers aus.
nothing
Entspricht none in Python.
member/id | nothing
gibt ebenfalls die ID des angemeldeten Nutzers aus, vermeidet jedoch eine Fehlermeldung bei der Nutzung des Formulars durch nicht-angemeldete Nutzer.
modules
Der Module-Importer.

Python-Ausrücke

Hierzu wird python: vorangestellt, also z.B.

python: DateTime()

gibt das aktuelle Datum aus:

2013/07/13 13:50:31.559413 GMT+2

Aufruf eines Python-Skript

Für Komplexere Berechnungen sind TALES-Ausdrücke jedoch kaum geeignet. Hier empfiehlt sich, ein Python-Skript im Formularodner zu erstellen und dieses anschließend mit TALES aufzurufen. Wenn daas Python-Skript die ID getGroup hat, ist der zugehörige TALES-Ausdruck folder/getGroup.

Das Python-Skript selbst kann dann z.B. folgendermaßen aussehen:

request = container.REQUEST
request.form.setdefault('group', 'calculated group')

Selbstverständlich kann in diesem Python-Skript auch eine externe Methode aufgerufen werden. Im folgenden ein einfaches Beispiel:

  1. Zunächst erstellen wir das Python-Skript:

    request = container.REQUEST
    RESPONSE =  request.RESPONSE
    
    # Call external method to get existing groups
    context.getGroups(context, request.form.keys(), request.form.values())
    
  2. Nun kann die externe Methode in Ihrem Produkt erstellt werden:

    def getGroups(self)
        """Yor external method"""
        …
    
  3. Schließlich wird das Python-Skript als TALES-Ausdruck in Überschreiben eingetragen.