[Zope-CMF] Re: Add forms and menus

Charlie Clark charlie at begeistert.org
Sun Jul 13 15:11:54 EDT 2008


Am 13.07.2008 um 20:21 schrieb Martin Aspeli:

> I doubt that formlib will be replaced by z3c.form. Rather, it just  
> seems that everyone prefers to work with the latter and so the  
> former is becoming less relevant.

I wonder who "everyone" is? When I asked Maartijn Faassen as  
Europython he didn't seem to be in a hurry to migrate Grok to using  
z3c.form and his work on Formulator was possibly the start of a Zope  
forms library of which formlib and z3c.form are the nth and n+1th  
generations.

> They are definitely different, and don't share any code as far as I  
> know, but if you know one, moving to the other is pretty trivial.  
> z3c.form also has good (if a bit too abundant) documentation.

I've only briefly looked at z3c.form but it seems to make abundant  
reference to how zope.formlib works.

> Thus, if CMF hasn't yet picked a form library in a release, then you  
> could try to learn from Plone's mistakes and not jump on a sinking  
> ship. :)

We're already using zope.formlib in the "experimental browser views"  
edit forms. The reference to a sinking ship is totally off-target. My  
own view is that sometimes it is better to wait for version 2 of a  
product or library to be released before adoption. Surely Plone has  
suffered from adopting some stuff too early?

>>> How about we use a naming convention that's linked to the factory   
>>> that's persisted in the FTI, i.e. we look for a view called "add-  
>>> <factory_name>" and link to that if it's available.
>> You might as well stick with actions if you're going to do that.  
>> I've  been experimenting with the following
>> portal_type = self.request.form.get('portal_type')
>> at = getToolByName(self.context, 'portal_actions')
>> actions = at.listFilteredActionsFor(self.context)
>> addable = actions.get('add', [])
>> for a in addable:
>>     if a['id'] == portal_type:
>> 	return request.response("%s/%s" (%self.context.absolute_url(),   
>> a['url']))
>> It's workable but so easy to break as it relies on "add" actions   
>> having the same name as the portal_type. It makes much more sense  
>> to  me to have this on the type info: if I ask the type tool for  
>> the  factory, surely I can also ask it for the view?
>
> You mean we have an action on the FTI object with category 'add' and  
> name == FTI name/portal_type? That still means having to get that  
> link right, though (a typo in the FTI name or a rename of the FTI  
> makes it break), and I question whether you ever need all the other  
> info that actions provide. We already have ways to control add  
> permissions and other filters for what's addable where.


Yes, which is why I don't favour this approach: it can work but is  
likely to cause problems.

What we all want is to be able to get the add view for a particular  
portal_type but we can't do this through QueryMultiAdapter because the  
view has to be registered on a container. Actions are unsuitable but  
provided Yuppie with a bootstrap to test the whole procedure and  
highlight the deficiencies. I'm afraid I don't understand the  
internals too well but isn't something like <cmf:registerAddView ...>  
or what we're after until the Zope 3 world comes up with "the right  
way to do this"?

Charlie
--
Charlie Clark
Helmholtzstr. 20
Düsseldorf
D- 40215
Tel: +49-211-938-5360
GSM: +49-178-782-6226





More information about the Zope-CMF mailing list