我正在尝试为Plone网站构建一个表单包。我目前正在使用Plone 4.3。在我将敏捷与Five.grok和grok库一起使用之前。但是,在阅读了本文的Plone 4.3迁移和Five.grok依赖项一节:http://developer.plone.org/components/grok.html之后,Plone开发人员似乎不再使用grok。

因此,我应该放弃使用Grok,而当当前所有当前文档都在使用Grok时,我将如何去做呢?另外,我正在从基于Windows的计算机上进行开发。

最佳答案

首先创建没有grok的表单并不难,并且不取决于您的操作系统。

创建表单始终是相同的。这是我的操作方法:

  • 一些进口

  • 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"
        )
    
  • 创建一个通用适配器以从
  • 的任何地方填写表单

    class AddFormAdapter(object):
        interface.implements(AddFormSchema)
        component.adapts(interface.Interface)
        def __init__(self, context):
            self.what = None
            self.where = None
    
  • 然后编写表格

  • class AddForm(AutoExtensibleForm, form.Form):
        schema = AddFormSchema
        form_name = 'add_content'
    
  • 添加 View

  • class AddButton(layout.FormWrapper):
        """Add button"""
        form = AddForm
    
  • 现在是ZCML,这是使用grok时不需要的步骤:

  • <adapter factory=".my.AddFormAdapter"/>
    <browser:page
      for="*"
      name="my.addbutton"
      class=".my.AddButton"
      template="addbutton.pt"
      permission="zope2.View"
      />
    

    如果您离开了骗子:

    这取决于您在做什么。对于插件,我说是,但对于项目,则取决于您。

    Grok并不是已经很大的Zope的一部分。因此,添加依赖项是始终仅在需要时才应该做的事情。 Grok是一种选择,因此我从未使用过。

    关于Plone 4.3-如何在不使用Grok的情况下使用Zc3.form构建Form包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19103827/

    10-13 01:26