[Zope3-dev] [DRAFT] local portlets and perspectives
Jim Fulton
jim at zope.com
Tue Aug 30 12:07:56 EDT 2005
Jean-Marc Orliaguet wrote:
> Jim Fulton wrote:
>
>
>>Jean-Marc Orliaguet wrote:
>>
>>
>>>this is more a design feature than an implementation feature.
>>
>>
>>Could you explain *why* you need relations?
>>
>>
>
>
> yes, because adapters provide flexible relations between *components*
> (interfaces, classes), but not between *content* objects. I want to be
> able to say (or the user)
>
> - this portlet uses this widget
I'm confused. In the doctest you pointed out:
https://svn.nuxeo.org/trac/pub/file/z3lab/cpsskins/branches/jmo-perspectives/doc/portlet-rendering.txt
the portlet and widget are wired up by hand, not by lookup AFAICT.
> - this portlet uses this style
>
> not for a *class* of portlets, but for *instances* of classes. Adapters
> connect interfaces, not instances.
Then why not just store the style in the portlet?
> to sum up: for exactly the same reason as why Zope2 moved to a
> component-based architecture, but for the content this time. I want to
> be able to connect content objects (portlets, styles, widgets, layouts)
> in a flexible way.
>
> and by the way it works, so why explain why you need something when it
> works as expected?
Because to decide if I want to use it, I need to evaluate the architecture:
- I need to know if there are hidden costs that aren't apparent in
demos and small scale.
Your solution requires a potentially large centralized indexing structure.
I don't like large centralized indexing structures. They are necessary
sometimes, but I don't want to use them if I can avoid it.
- Your system defines a framework that I'll need to understand if
we want to use it. I need to understand if developers will find it
easy to use
>>>if other combinations of filters are used (a RSS filter for instance),
>>>the same data is displayed in RSS instead of HTML.
>>
>>
>>Why would you want to generate RSS in a portlet?
>
>
>
> the portlet data is used for syndication in RSS / ATOM too in a RSS
> rendering engine (the [RSS] orange button).
Is this a case where you are using a portlet as an application
component outside the context of a page?
...
>>I guess the widget filter somehow decides how to generate HTML based
>>on the widget and data. Similarly, it somehow chooses a style.
>>It's unclear how this is working.
>>
>
> the widget knows nothing about the style that is going to be applied
> afterwards. The portlet <-> style connection is a relation defined in
> the relation store.
>
>
>>Can you say why you chose this division of labor?
>>
>
> it is one example of a chain of filters that covers most of the use
> cases to create HTML pages.
>
> Since the engine definition is defined in a zcml file it can be changed
> easily. I could go into the details of the design, but since it works as
> expected ...
>
>
>>I agree that, given a model where portlets only generate data, "pagelett"
>>is not a good name. Perhaps "applet" would be a better name.
>>
>>IMO, the choice of the term "widget" is unfortunate, both because it
>>clashes
>>with the Zope 3 use of the term and because it clashes with common
>>usage in
>>GUIS, where widgets are responsible for UI generation, whereas here,
>>AFAICT,
>>widgets are responsible for UI specification in some fashion.
>>
>>Here's an alternate suggestion that follows Zope 3 style a bit more:
>>
>>- We have applets that provide application functionality. These are
>> like your portlets.
>>
>>- We define layout types. These extend something like ISubPage (as
>>defined in
>> formlib). Alternatively, we use named adapters.
>>
>
> what is a layout type?
The thing you specify with the widget keyword argument to the Widget
contructor in the doctest you sent.
>
>
>>- We adapt the applets with the request to the layout type:
>>
>> view = component.queryMultiAdapter((applet, request), IDropDownList)
>>
>> or, with named adapters:
>>
>> view = component.queryMultiAdapter((applet, request), ISubPage,
>>'dropdown_list')
>>
>>Would something like this work for you?
>>
>>Jim
>>
>
>
> I don't think so, because the relation portlet <-> widget <-> layout
> gets hardcoded in python.
In the example you asked me to look at, the portlet<->widget relation
seemed to be hardcoded in Python.
In any case, adapter definitions are not hardcoded in Python.
> I would mean that I would have to rewrite the
> AJAX theme editor.
>
> the difference with the rendering architecture that I have implemented
> is that new rendering engines can be created by reusing components.
>
> I think that your approach is not generic enough, it is too much tied
> with the webpage generation paradigm (it assumes that a portlet has a
> layout, or a style...) which are web-related concepts.
I see your point about not wanting to store a web style with a portlet
instance. I need to think about this.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Zope3-dev
mailing list