Hallo zusammen,
im Netz bin ich auf das Beispiel Personenverwaltung gestoßen, wie man eine eigene Edit-Form für Archetypes CTs erstellt.
http://www.nabble.com/Re%3A-Seeking-…-p10885580.html
Dieses Beispiel habe ich bei mir probiert und komme nun leider nicht weiter.
Als erstes der Code des Personen-Schemas/-Klasse. Um den CT zum Laufen zu bringen, musste ich im Vergleich zum Code auf obiger Seite noch einige Imports einfügen.
# CMF imports
from Products.CMFCore import CMFCorePermissions
# Archetypes imports
from Products.Archetypes.public import BaseSchema, Schema
from Products.Archetypes.public import IntegerField, StringField
from Products.Archetypes.public import IntegerWidget, StringWidget
from Products.Archetypes.public import BaseContent, registerType
from Products.Archetypes.Marshall import PrimaryFieldMarshaller
from Products.Archetypes.TemplateMixin import TemplateMixin
# Product imports
from config import PROJECTNAME
# Schema definition
schema = BaseSchema.copy() + Schema((
IntegerField('person_id',
widget = IntegerWidget(label = "Person Id"),
),
StringField('first_name',
widget = StringWidget(label = "First Name"),
),
StringField('last_name',
widget = StringWidget(label = "Last Name"),
),
), marshall=PrimaryFieldMarshaller(),
)
class Person(BaseContent):
"""An Archetype for a Person"""
schema = schema
portal_type = meta_type = 'Person'
archetype_name = 'Person'
_at_rename_after_creation = True
actions = TemplateMixin.actions
aliases = {
'(Default)' : 'person_view',
'view' : 'person_view',
'edit' : 'person_edit',
'properties' : 'base_metadata',
}
registerType(Person, PROJECTNAME)
Alles anzeigen
An der person_edit.cpt habe ich nichts geändert:
<html metal:use-macro="here/main_template/macros/master"
i18n:domain="plone" >
<body>
<div metal:fill-slot="main">
<form method="POST" tal:attributes="action string:${here/absolute_url}/${template/id};">
<input type="hidden" name="form.submitted" value="1" />
<p class="error_message" tal:define="err errors/n|nothing"
tal:condition="err"></p>
<div class="field">
<label i18n:translate="">FIRST Name:</label>
<div metal:use-macro="python: here.widget('first_name',mode='edit')" />
</div>
<div class="field">
<label i18n:translate="">LAST Name:</label>
<div metal:use-macro="python: here.widget('last_name',mode='edit')" />
</div>
<div class="field">
<label i18n:translate="">PERSON Id:</label>
<div metal:use-macro="python: here.widget('person_id',mode='edit')" />
</div>
<input type="submit" name="form.button.submit" value="Save"
tal:attributes="tabindex tabindex/next" /></p>
</form>
</div>
</body>
</html>
Alles anzeigen
Das Problem ist nun, dass statt der person_edit immer noch die base_edit aufgerufen wird. Allerdings steht auch bei /Plone/portal_types/Person unter Initial view name noch base_edit. Ändere ich dies nun auf person_edit, bekomme ich den Fehler Nameerror/name 'errors' is not defined. Irgendwo muss also noch ein Fehler sein. Allerdings wird im obigen Link auch gesagt, dass nachdem alle Fehler beseitigt wurden, trotzdem die base_edit aufgerufen wird.
Lange Rede, kurzer Sinn... könnte bitte jemand mal dieses Beispiel ausprobieren und das person_edit zum Laufen bekommen?
Tausend Dank!
Greets, Moerz