2013-09-30 2 views
5

Я пытаюсь создать пакет формы для сайта Plone. В настоящее время я работаю с Plone 4.3. До того, как я использовал Ловкость с библиотеками five.grok и grok. Но после чтения раздела Plone 4.3 и 5.grok зависимости этой статьи: http://developer.plone.org/components/grok.html кажется, что разработчики Plone отходят от использования grok все вместе.Plone 4.3 - Как создать пакет формы с использованием Zc3.form без Grok?

Должен ли я отойти от использования Grok и как я буду это делать, когда вся текущая документация в настоящее время использует Grok? Кроме того, я разрабатываю машину на базе Windows.

ответ

3

Первое создание формы без 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 
  • Теперь ZCM L раз это шаг вам не нужно при использовании ГРОК:
<adapter factory=".my.AddFormAdapter"/> 
<browser:page 
    for="*" 
    name="my.addbutton" 
    class=".my.AddButton" 
    template="addbutton.pt" 
    permission="zope2.View" 
    /> 

Если вы двигаетесь от Grok:

Это зависит от того, что вы делаете. Для аддона я говорю «Да», но для проекта это зависит от вас.

Grok не является частью уже большого Zope. Поэтому добавление зависимости - это то, что всегда нужно делать только в случае необходимости. Грок - это вариант, поэтому я никогда не использовал его.

+0

+1 для очень приятного ответа, можно было сразу скопировать в документы. Просто интересно, нужен ли адаптер здесь, соответственно, если бы вы могли привести пример использования? –

+1

спасибо. z3cform использует этот адаптер для заполнения формы в зависимости от контекста. Например, здесь вы можете предварительно загрузить где-то текущее содержимое, используя что-то вроде self.where = IUUID (self.context) – toutpt

+0

Ах, это звучит разумно. Мерси на бис за полезную информацию! –

Смежные вопросы