2013-09-30 27 views
5

Ich versuche ein Formularpaket für eine Plone-Website zu erstellen. Ich arbeite derzeit mit Plone 4.3. Bevor ich Dexterity mit five.grok und grok Bibliotheken benutzt habe. Aber nach dem Lesen der Plone 4.3 Migration und five.grok Abhängigkeit Abschnitt dieses Artikels: http://developer.plone.org/components/grok.html es scheint, dass Plone-Entwickler sind weg von der Verwendung von grok alle zusammen.Plone 4.3 - Wie man ein Formpaket mit Zc3.form ohne Grok baut?

Also sollte ich mich von der Verwendung von Grok abwenden und wie würde ich das machen, wenn die aktuelle Dokumentation gerade Grok verwendet? Zusätzlich entwickle ich von einer Windows-basierten Maschine.

Antwort

3

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:

  • Einige Importe
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 _ 
  • Erstellen Sie ein Schema
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' 
  • hinzufügen Ansicht
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.

+0

+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? –

+1

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

+0

Ah ok, das klingt vernünftig. Merci-Zugabe für die hilfreiche Information! –