代码之家  ›  专栏  ›  技术社区  ›  Herr Josua

Plone 4.3-如何在没有Grok的情况下使用Zc3.Form构建Form包?

  •  5
  • Herr Josua  · 技术社区  · 11 年前

    我正在尝试为Plone网站构建一个表单包。我目前正在使用Plone 4.3。之前我在五个.grok和grok库中使用Dexterity。但在阅读了本文的Plone 4.3迁移和five.grok依赖部分后: http://developer.plone.org/components/grok.html Plone的开发人员似乎正在远离一起使用grok。

    那么,我应该放弃使用Grok吗?当当前所有文档都在使用Grok时,我该如何做到这一点?此外,我正在一台基于Windows的机器上进行开发。

    1 回复  |  直到 11 年前
        1
  •  3
  •   toutpt    11 年前

    首先在没有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'
    
    • 添加视图
    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是一个选项,所以我从未使用过它。