[snip]

I still haven't gotten it working yet though. I'm going to keep trying to figure out what
the problem is, I think I see what your basic strategy is.

However there are a few error I found in your example you may be interested in fixing:

in your interfaces.py file you probably want the IPhoneBookEntry interface to look like
this:

[...]

Sorry for the Typo - corrected it. But the whole concept works for me - I'm
using schema.Object, too.

Maybe I can help - what's the problem?


I'm still getting a "ComponentLookupError". I'll just include the example I'm trying to make work at the bottom, it's pretty short. I'm beginning to think there may be something in your explication that I need to understand.

Also, from looking at your example I'm guessing your using the SVN version of zope3, is that true and do you happen to know if that would make a difference? I'm currently using Zope-3.2.1.

thanks

-jachin

# -=interfaces.py=-

from zope.interface import Interface
from zope.schema import TextLine, Object

class IStreetAddress(Interface):
        """A street address"""
        
        street = TextLine(
                title=u"street",
                description=u"",
                required=False)


class IABookEntry(Interface):
        """An address book entry"""
        streetAddress = Object(
                schema=IStreetAddress,
                title=u"Street Address",
                description=u"",
                required=False)
        
        firstName = TextLine(
                title=u"First Name",
                description=u"",
                required=False)
        


# -=entry.py=-

from zope.interface import implements
from persistent import Persistent
from interfaces import IStreetAddress
from interfaces import IABookEntry


class StreetAddress(Persistent):
        """The Street Address object."""
        implements(IStreetAddress)


class ABookEntry(Persistent):
        """The Address Book Entry object."""
        implements(IABookEntry)

from zope.app.form.browser import ObjectWidget
from entry import ABookEntry

def ABookEntryWidget(context,obj,request):
        # We create an objectwidget which is aware of the correct object
        # factory (here:PhoneNumber)
        return ObjectWidget(context, request, ABookEntry)



# -=widgets.py=-

from zope.app.form.browser import ObjectWidget
from entry import ABookEntry

def ABookEntryWidget(context,obj,request):
        return ObjectWidget(context, request, ABookEntry)



<!-- -=configure.zcml=- -->

<configure
        xmlns="http://namespaces.zope.org/zope";
        xmlns:browser="http://namespaces.zope.org/browser";>
        
        <content class=".entry.ABookEntry">
                <factory
                        id = "entry.ABookEntry"
                        title = "An address book entry"
                        />
                <require
                        permission="zope.View"
                        interface=".interfaces.IABookEntry"
                        />
                <require
                        permission="zope.ManageContent"
                        set_schema=".interfaces.IABookEntry"
                        />
        </content>
        
        <content class=".entry.StreetAddress">
                <allow interface=".interfaces.IABookEntry" />
        </content>
        
        <view
                type="zope.publisher.interfaces.browser.IBrowserRequest"
                for="zope.schema.interfaces.IObject .interfaces.IStreetAddress"
                provides="zope.app.form.interfaces.IInputWidget"
                factory=".widgets.ABookEntryWidget"
                permission="zope.Public"
        />
        
        <browser:addform
                label = "New address book entry"
                name = "add_address_book_entry.html"
                schema = ".interfaces.IABookEntry"
                content_factory = ".entry.ABookEntry"
                permission = "zope.ManageContent"
                />
        
        <browser:editform
                label = "Change address book entry"
                name = "edit.html"
                schema = ".interfaces.IABookEntry"
                permission = "zope.ManageContent"
                menu="zmi_views"
                title="Edit"
                />
        
        <browser:addMenuItem
                title="ABook Entry"
                class=".entry.ABookEntry"
                permission="zope.ManageContent"
                view = "add_address_book_entry.html"
                />
        
</configure>
_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to