[Zope3-Users] ++skin++Boston bug
    Marco Mariani 
    marco at sferacarta.com
       
    Wed May 24 01:19:38 EDT 2006
    
    
  
dev at projekt01.ch wrote:
> Hi Marco
> 
> [...]
>> /me guesses this has to do with using the widget_row macro 
>> inside another widget_row, thus trying to render 
>> <tr><td><tr><td>....</td></tr></td></tr> and the browser 
>> closes the fieldset, td and tr when it encounters a <td><tr> sequence.
> 
> There is something wrong if you get a widget_row inside a widget_row.
> What did you register that this nested widget/widget get happen?
Here it is:
---------------------
person/configure.zcml
---------------------
<configure xmlns="http://namespaces.zope.org/zope" i18n_domain="person" >
  <!-- PERSON -->
  <interface
    interface=".IPerson"
    type="zope.app.content.interfaces.IContentType"/>
  <class class=".Person">
    <factory
        id="person.Person"
        description="Person"
        />
    <require
        permission="zope.View"
        interface=".IPerson"
        />
    <require
        permission="zope.ManageContent"
        set_schema=".IPerson"
        />
  </class>
  <!-- FAMILY -->
  <interface
    interface=".IFamily"
    type="zope.app.content.interfaces.IContentType"
    />
  <class class=".Family">
    <factory
        id="person.Family"
        description="Family"
        />
    <require
        permission="zope.View"
        interface=".IFamily"
        />
    <require
        permission="zope.ManageContent"
        set_schema=".IFamily"
        />
  </class>
  <include package=".browser" />
</configure>
------------------
person/__init__.py
------------------
from zope.interface import Interface, implements
from zope.schema import TextLine, Object, List, Choice, Field
from persistent import Persistent
class IPerson(Interface):
    name = TextLine(title=u'Name')
class Person(Persistent):
    implements(IPerson)
    name = ''
class IFamily(Interface):
    mother = Object(title=u'Mother',
                    schema=IPerson)
    father = Object(title=u'Father',
                    schema=IPerson)
class Family(Persistent):
    implements(IFamily)
    mother = ''
    father = ''
-----------------------------
person/browser/configure.zcml
-----------------------------
<configure
    xmlns:zope="http://namespaces.zope.org/zope"
    xmlns="http://namespaces.zope.org/browser">
  <page
    class=".forms.FamilyAdd"
    name="AddFamily.html"
    permission="zope.ManageContent"
    for="zope.app.container.interfaces.IAdding"
    />
  <addMenuItem
    factory="person.Family"
    title="Family"
    description="New Family"
    permission="zope.ManageContent"
    view="AddFamily.html"
    />
</configure>
-----------------------
person/browser/forms.py
-----------------------
from zope.formlib.form import Fields, AddForm, EditForm
from person import Person, IPerson, Family, IFamily
from zope.app.form.browser import ObjectWidget
from zope.app.form import CustomWidgetFactory
class FamilyAdd(AddForm):
    form_fields = Fields(IFamily)
    form_fields['mother'].custom_widget =
CustomWidgetFactory(ObjectWidget, Person)
    form_fields['father'].custom_widget =
CustomWidgetFactory(ObjectWidget, Person)
    def create(self, data):
        family = Family()
        family.mother = data['mother']
        family.father = data['father']
        return family
    
    
More information about the Zope3-users
mailing list