I have a container and I would like to combine the views of the container objects.  Does anyone have suggestions?  This is rather simple and complex at the same time.

 

Basically, what I’m trying to do is to display a rather complex form and I want it to consist of the objects in container.    

 

Imagine buying a car online.  Consider the following Zope object layout:

 

Truck Container:

+ Four Well Drive Options

+ Four Runner Container:

++ Seat Options

++ Stereo Options

++ Color Options

++ Running Board Options

+ Sequoia Container:

++ Seat Options

++ Stereo Options

++ Color Options

+ Tacoma Container:

++ Tow hook Options

++ Stereo Options

++ Color Options

 

I know only two ways to achieve this objective now, neither which I like.

1. Create a view on the container that calls my showOptions subroutine, which in turn calls a predefined and specific view class for each content type.  The problem is the large number of conditionals, and its hard to add more options without modifying each class and hardcoding the content types.

    def showOptions(self):

        “”” Return an HTML string of all of the options and selected values”””

        options = []

        for name, child in self.context.items():

            if ISeatOptions.providedBy(child):

                option = {}

                option['title'] = child.name

                option[‘choices’] = SeatOptions(child, self.request, self.base_url)

                options.append(info)

            if IColorOptions.providedBy(child):

                option = {}

                option['title'] = child.name

                option[‘choices’] = ColorOptions(child, self.request, self.base_url)

                options.append(info)

 

        return options

 

2. Create a subroutine “getForm()” in each content object, and derive all content objects from “FormOption” to ensure they all have the “getForm()” function.  Then define my showOptions() routine.  The problem with this approach is that it the content object is not actually a typical view, and so the content object has trouble manipulating sessions and rendering page templates (because many of the view functions like “self.request, and self.context”, which cause problems with the persistence required for most content objects).

    def getOptions(self):

        options = []

        for name, child in self.context.items():

            if IFormOption.providedBy(child):

                option = {}

                option['title'] = child.name

                option['modifiers'] = child.getForm(self.request)

                options.append(info)

 

        return options

 

 

 

--

David Johnson

[EMAIL PROTECTED]

201 Main Street Suite 1320

Fort Worth, TX 76102

(877) 572-8324 x2200

 

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to