Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Dynamisches Anpassen eines Widgets in z3c.form

Dynamisches Anpassen eines Widgets in z3c.form

Widgets haben statische Attribute, wie z.B. den Title. Es ist möglich, diese Attribute über Adapter zu dynamisch verändern.

Im folgenden Beispiel, haben wir ein einfaches z3c.form Schema mit einem Textfeld. Dieses Textfeld hat den Titel "Some Title" und soll mit hilfe eines Adapters verändert werden.

from zope import schema
from plone.directives import form


class ISimpleEntry(form.Schema):
"""A simple Contentrype"""

title = schema.TextLine(
required = True,
title = _(u"Some Title",),
)

Für das zu verändernde Feld, definieren wir uns eine Adapterfactory:

from z3c.form import widget

FieldTitle = widget.StaticWidgetAttribute(
u'Another Title',
field=ISimpleEntry['title']
)

FieldTitle ist der Adapter, welchen wir im nächsten Schritt registrieren. "Another Title" ist der neue Wert den wir anzeigen möchten und field=ISimpleEntry['title'] das zu veränderte Feld.

Wir registrieren nun den Adapter, wofür wir 2 Möglichkeiten haben.

Registrieren per ZCML:

Um einen Adapter per zcml zu registrieren, fügen wir folgenden Abschnitt in die Datei configure.zcml oder darin eingebundenen zcml-Dateien ein.

<adapter
factory=".adapters.FieldTitle"
name="label"
/>

In unserem Beispiel liegt die oben definierte AdapterFactory in der "adapters.py" und wird relativ in der ZCML datei als "factory" angegeben.

Registrieren im Code:

Die zweite Möglichkeit besteht darin, den Adapter direkt im Python-Code zu registrieren. Die obere Möglichkeit sollte allerdings bevorzugt werden!

import zope.component
zope
.component.registerAdapter(FieldTitle, name="label")

überarbeiten

Kommentar von Maik Derstappen am 03.06.2010 14:09
Stell dir mal die Frage, was du hier wirklich erläutern willst!
Denk dabei daran was für dich die Frage war, bevor du dich in das Thema eingearbeitet hast und versuche diese mit dem Artikel zu beantworten.

überarbeiten

Kommentar von Maik Derstappen am 03.06.2010 14:11
und zieh das mal an einem Beispiel durch, also richtige Pfade nicht: .path.to.pythonfile.FieldTitle. Das läßt sich dann besser nachvollziehen.