Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Plone: Archetypes Schemata und Fields

Plone: Archetypes Schemata und Fields

In Plone sind die einzelnen Archetypes Felder in einzelne Schemata unterteilt. Man kann sich leicht eigene im Schema definieren und ihnen Felder zuweisen. Auch ist es möglich vorhandene Standardfelder in andere Schemata zu verschieben.

Ein Archetypesfeld einem schemata (Tab) zuweisen

atapi.StringField(
'link',
schemata = 'Tab 2',
storage = atapi.AnnotationStorage(),
validators = ('isURL',),
widget = atapi.StringWidget(
description = _(
u"description_link",
u"Please give hyperlink",
),
label = _(
u"label_link",
u"Rating scheme Link",
),
)
),

Felder eines Schematas ermitteln

Um die vorhandenen Felder eines Schematas zu ermitteln (nützlich wenn man z.B. das default schemata ausblenden möchte) kann man folgende Methode verwenden.

page1.schema.getSchemataFields('default')

Page1 ist hier einfach eine ATContentTypes Page.

Schemafelder per moveField sortieren

mit der Methode moveField können Felder innerhalb eines Schemas verschoben werden.
z.B. kann wie folgt das Feld description über das Feld titel geschoben werden:

MySchema.moveField('description',before='title')

Hier ein Auszug aus ISchema:

def moveField(name, direction=None, pos=None, after=None, before=None):
    """Move a field     
    name:
        name of the field
    direction:
        Move a field inside its schemata to the left (-1) or to the right (+1)
    pos:
       Moves a field to a position in the whole schema. pos is either a number
        or 'top' or 'bottom'
    after:
        Moves the field 'name' after the field 'after'
    before:
        Moves the field 'name' before the field 'before'
    """

Die Schemata Tabs in die richtige Reihenfolge bringen

Die Schemata Tabs sind automatisch in der Reihenfolge, wie das jeweils erste Feld eines Schematas aufgetreten ist. Wenn man also ein FeldA im SchemataA an erster Stelle hat und man möchte das dieser Tab an erster Stelle steht, so verschiebt man das FeldA wie folgt an die Position 1 des gesamten Schemas.

MySchema.moveField('FeldA', pos='top')

Hierdurch ist wird das dem FeldA zugewiesene Schemata als erstes erfasst und steht an erster Stelle. Wenn wir analog dazu das erste Feld in SchemataB gleich darunter anortnen, haben wir auch diese Position definiert. Alle weiteren Felder der Schematas können beliebig definiert werden, dort ist lediglich die Reihenfolge innnehalb der Schematas wichtig für die Darstellung innerhalb eines Tabs.

Weitere nützliche Methoden für Schemafelder (ISchema)

def changeSchemataForField(fieldname, schemataname):
"""Change the schemata for a field """

def getSchemataNames():
"""Return list of schemata names in order of appearing"""

def getSchemataFields(name):
"""Return list of fields belong to schema 'name'
in order of appearing
"""

def replaceField(name, field):
"""Replace field under ``name`` with ``field``"""