[Zope-CMF] [dev] add view traversal

yuppie y.2008 at wcm-solutions.de
Sun Sep 14 06:26:16 EDT 2008


Hi!


This mail has been lying around for a while because I'm not sure it's 
the right way to start the discussion. But now I'll give it a try. Maybe 
the sprinters find some time to discuss this:

One result of the "Add forms and menus"[1] thread was that we'd like to 
get add views by portal type name. Some custom traversal should look up 
and return the right view for the specified portal type.

I'm currently trying to figure out how to implement that correctly and 
am struggling with some details:


1.) What should URLs look like?
-------------------------------

Here are same possible URLs for adding a Message to a guest book:

http://www.example.org/guestbook/+Message
http://www.example.org/guestbook/@@+Message
http://www.example.org/guestbook/addMessage.html

http://www.example.org/guestbook/+/Message
http://www.example.org/guestbook/@@+/Message
http://www.example.org/guestbook/+/addMessage.html

http://www.example.org/guestbook/+cmf/Message
http://www.example.org/guestbook/@@+cmf/Message
http://www.example.org/guestbook/+cmf/addMessage.html

http://www.example.org/guestbook/add/Message
http://www.example.org/guestbook/@@add/Message
http://www.example.org/guestbook/add/addMessage.html


2.) Which hook should be used for custom traversal?
---------------------------------------------------

a) for URLs like http://www.example.org/guestbook/+Message

In this case we use a special prefix '+' followed by the portal type 
name. CMF containers don't implement IPublishTraverse, so we can 
register an IPublishTraverse adapter. If we don't find an add view, we 
can fall back to DefaultPublishTraverse behavior.

Unfortunately the IPublishTraverse hook only works with one adapter. If 
other packages like plone.app.imaging[2] try to use the same hook, we 
get a problem.


b) for URLs like http://www.example.org/guestbook/+/Message

The '+' view already implements IPublishTraverse, so we can't change 
traversal using an adapter. The only solution I can see is to replace 
the '+' view by a customized version.


c) for URLs like http://www.example.org/guestbook/add/Message

If we use our own adding view, we can implement IPublishTraverse inside 
the view or as adapter.


3.) For which context should we register the add views?
-------------------------------------------------------

The add views will depend on special portal type handling done by the 
traverser. So we register the add views for traverser?

Or should all views have a default portal type that is used if we access 
add views directly? In that case we would register the add view for the 
container.



plone.dexterity[3] uses an @@add-dexterity-content traverser, but I 
don't think product names like dexterity or cmf should be visible in 
URLs. Those are implementation details that should be transparent for users.

Any feedback is welcome.


Cheers,

	Yuppie



[1] http://mail.zope.org/pipermail/zope-cmf/2008-July/027500.html

[2] 
http://dev.plone.org/plone/browser/plone.app.imaging/trunk/plone/app/imaging/traverse.py

[3] 
http://dev.plone.org/plone/browser/plone.dexterity/trunk/plone/dexterity/browser/add.py



More information about the Zope-CMF mailing list