Das erste Erstellen von Form ohne grok ist nicht so schwer und hängt nicht von Ihrem Betriebssystem ab.
Das Erstellen eines Formulars ist immer gleich. Hier ist, wie ich vorgehen:
from Products.Five.browser import BrowserView
from plone.autoform.form import AutoExtensibleForm
from plone.app.z3cform import layout
from zope import interface
from zope import schema
from zope import component
from z3c.form import form
from collective.my.i18n import _
class AddFormSchema(interface.Interface):
what = schema.Choice(
title=_(u"What"),
vocabulary="plone.app.vocabularies.UserFriendlyTypes"
)
where = schema.Choice(
title=u"Where",
vocabulary="collective.my.vocabulary.groups"
)
- eine generische Adapter erstellen, um das Formular ausfüllen von überall
class AddFormAdapter(object):
interface.implements(AddFormSchema)
component.adapts(interface.Interface)
def __init__(self, context):
self.what = None
self.where = None
- schreiben Sie dann das Formular
class AddForm(AutoExtensibleForm, form.Form):
schema = AddFormSchema
form_name = 'add_content'
class AddButton(layout.FormWrapper):
"""Add button"""
form = AddForm
- Jetzt ZCM L Zeit ist dies der Schritt brauchen Sie nicht, wenn grok mit:
<adapter factory=".my.AddFormAdapter"/>
<browser:page
for="*"
name="my.addbutton"
class=".my.AddButton"
template="addbutton.pt"
permission="zope2.View"
/>
Sollten Sie von grok bewegen:
Dies ist abhängig von dem, was Sie tun. Für ein Addon sage ich Ja, aber für ein Projekt liegt es an dir.
Grok ist nicht Teil des bereits großen Zope. Das Hinzufügen von Abhängigkeiten sollte daher immer nur bei Bedarf durchgeführt werden. Grok ist eine Option, also habe ich es nie benutzt.
+1 für sehr nette Antwort, könnte direkt in die Dokumente kopiert werden, eigentlich :) Nur wundern, wenn der Adapter hier erforderlich ist, bzw. wenn Sie ein Anwendungsbeispiel dafür geben könnten? –
danke. z3cform Verwenden Sie diesen Adapter, um das Formular abhängig vom Kontext auszufüllen. Zum Beispiel möchten Sie hier vielleicht den Where mit dem aktuellen Inhalt mit etwas wie self.where = IUUID (self.context) laden – toutpt
Ah ok, das klingt vernünftig. Merci-Zugabe für die hilfreiche Information! –