Laurent Mignon a écrit :
> Jean-Michel FRANCOIS wrote:
>> Martin Aspeli a écrit :
>>> Jean-Michel FRANCOIS wrote:
>>>> Dylan Jay a écrit :
>>>>> On 12/08/2009, at 1:11 AM, Jean-Michel FRANCOIS wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I need to make a complex form this week. I need to do the same
>>>>>> form as
>>>>>> the contact advanced search inside thunderbird. For those who
>>>>>> doesn't
>>>>>> know it here is a screen shot:
>>>>>> http://nsit.uchicago.edu/img/email/tbird-advanced-search.png
>>>>>>
>>>>>> The form is built by the user. He can add form fields define
>>>>>> 'where' to
>>>>>> search, ...
>>>>> Do you mean that you want an admin user to be able to change the
>>>>> schema (fields) through a web UI?
>>>>> If so I don't think z3cform is for you. That is purely a code based
>>>>> way setting up a form.
>>>>> You want PloneFormGen if you want a to email the result or store the
>>>>> information in a simple table. Otherwise I believe dexterity has a
>>>>> TTW
>>>>> schema editing interface right? or at least planned to.
>>>>>
>>>>>
>>>>>
>>>>>> My question is:
>>>>>> * Could I use z3cform to do this ? I have tried it but I need to
>>>>>> define
>>>>>> a schema. But in my case, I don't know the schema ... it seems
>>>>>> not the
>>>>>> good way
>>>>>> * CMF FormController. I know how to do it with this technology,
>>>>>> but it
>>>>>> seems very old and I want my product to be fashionned and have a
>>>>>> good
>>>>>> future.
>>>>>> * By hand ? Coding every things and do not use any other
>>>>>> technologies
>>>>>> than browserview.
>>>>>> * Any other idea ?
>>>>>>
>>>>>> -- 
>>>>>> Cordialement,
>>>>>> Jean-Michel FRANCOIS
>>>>>> Makina-Corpus
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Product-Developers mailing list
>>>>>> [email protected]
>>>>>> http://lists.plone.org/mailman/listinfo/product-developers
>>>> No. I mean the user build the form. He is able to add or remove form
>>>> field. What is a form field in this case: It is a set containing those
>>>> things:
>>>>
>>>> A select input with all indexes as options.
>>>> A select input with constraints as options.
>>>> An input type text where the user put the value he wants to search
>>>> for.
>>>>
>>>> The UI give the user the ability to add/remove as many form field
>>>> as he
>>>> wants throw two buttons: 'more' and 'fewer'.
>>>>
>>>> But you have answered at one question: z3cform seems not
>>>> appropriate. It
>>>> is better for 'static' forms.
>>> I'm not sure. You can change the set of fields and widgets quite
>>> easily in the update() method (or one of the methods it calls), e.g.
>>> in response to something in the request.
>>>
>>> z3c.form would mainly give you fields, widget and validation. How you
>>> construct the set of fields is up to you. The most common (and most
>>> documented) pattern is to use an interface, but zope.schema fields can
>>> exist without an interface and forms can be constructed without a
>>> context.
>>>
>>> But you should expect to spend a few days figuring out z3c.form. I'm
>>> not aware of any documentation or examples that cover your use case.
>>>
>>> Martin
>>>
>> Yes I have started doing some codes to learn z3cform. The documentation
>> is very verbose but I have found a way of doing, you can find the
>> code here:
>> http://plone.pastebin.com/m5590d336
>>
>> The idea: using subforms and the more and fewer buttons will be
>> javascript + css effects that display or not the fields.
>>
>> This code seems pretty good to me but failed with this error:
>> AttributeError: 'SearchForm' object has no attribute 'actions' .
>> It happens if I define the update method in the global search form. I
>> don't understand I m calling the upper class, so no differences. If
>> someone can help me on this, I would be glade. The complete trace is
>> here: http://plone.pastebin.com/m4f71b339
>
> Update your searchForm before updating subforms. During subform
> update, the subform try to access the actions defined by parentForm.
> you can modify your code with:
>
>     def update(self):
>         super(SearchForm, self).update()
>         for i in range(NUM_FIELDS):
>             setattr(self, 'criteria-%s'%i,
>                     CriteriaForm(self.context, self.request, self))
>             getattr(self, 'criteria-%s'%i).update()
> or
>     def update(self):
>         super(SearchForm, self).updateActions()
>         for i in range(NUM_FIELDS):
>             setattr(self, 'criteria-%s'%i,
>                     CriteriaForm(self.context, self.request, self))
>             getattr(self, 'criteria-%s'%i).update()
>         super(SearchForm, self).update()
>
> Since the update on parentForm call updatActions, I've the feeling
> that the first way is the right way
>>
>> Now I m sure z3cform will fit with my needs.
>>
>>
>
>
> _______________________________________________
> Product-Developers mailing list
> [email protected]
> http://lists.plone.org/mailman/listinfo/product-developers
Thank you for the help, it fix the problem, but the documentation of
z3cform.subform explicitly show the way I was doing ... so may be
updating the documentation will be nice.

The code has been cleaned up a bit by using a list to store sub forms
and I have also past the part of the documentation of z3c.form.subform:
http://plone.pastebin.com/m5db665e5

I don't know if this is a bug coming from z3c.form or plone integration
but It may need to be said somewhere... I have lost about one hour on
this ...

-- 
Cordialement,
Jean-Michel FRANCOIS
Makina-Corpus



_______________________________________________
Product-Developers mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/product-developers

Reply via email to