Hi, I'm having problems with my Add Forms views (based in formlib.form.AddForm) in my transition from Zope 3.2 to Zope 3.3.
In Zope 3.2 I registered my views like this: <page for="zope.app.container.interfaces.IAdding" name="addPerson.html" class=".person.AddForm" permission="zope.Public" menu="zmi_views" title="Add Person" /> And my container implemented the marker interface zope.app.container.interfaces.IContentContainer. The default view for my container has an 'Add' button with an action that just redirect to '+/addPerson.html' Everything worked fine with this model. Now, in Zope 3.3 I have two problems: 1. If I don't add the directive <containerViews> to my container I get a NotFound exception when going to '/mycontainer/+/addPerson.html'. To fix this problem I have added this directive: <view name="+" for="myapp.interfaces.IMyContainer" class="zope.app.container.browser.adding.Adding" permission="zope.ManageContent" /> 2. When my add form is displayed in the Rotterdam skin I get an extra tab for every other contenttype I have a page registered like the example above. For example, I also have a Product content type and it has an AddForm like the Person AddForm. When I'm looking at '/mycontainer/+/addPerson.html' I got 4 tabs: - Add (the one for adding the person) - Add Product - Introspection - Registration And obviously I shouldn't get the second tab. Looks like it is showing everything that is registered for the IAdding interface, and that sound logical but my question is: Why it didn't work that way in Zope 3.2? and, How do I get my expected behavior? Best regards, Lorenzo Gil Extra thoughts: Probably the cause of my problems is that I don't fully understand the adding process in Zope 3 so I'll try to explain what I think it is happening just in case anyone can correct me if I'm wrong: When traversing '/mycontainer/+/addPerson.html' Zope gets to the '+' path and it gets a view for the IMyContainer interface. This view is handled by the zope.app.container.browser.adding.Adding class that implements the zope.app.container.interfaces.IAdding interface. Then, traversal continues to 'addPerson.html' and Zope gets my view that is registered for IAdding. So I got a view for a (previous) view object that is applied to my container. That's why in my AddForm self.context is the Adding object and self.context.context is my container object. _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users