[Zope3-Users] Using IPathAdapter on menuItem

Garrett Smith garrett at mojave-corp.com
Sun May 1 14:31:49 EDT 2005


Good idea :-) Wish I had thought of that.

 -- Garrett

Florian Lindner wrote:
> Hey,
> a IMO good solution just came into my mind while taking a nap. I
> implemented the solution in 5 minutes and it workes.
> It registered a view:
> 
>     <page
>         name="toHomeFolder"
>         for="*"
>         permission="zope.Public"
>         class=".views.toHomeFolder"
>         layer="centershock"
>         menu="CSnavMenu"
>         title="home folder" />
> 
> and the view class:
> 
> class toHomeFolder(object):
>     """ Makes a redirect to the homefolder of the principal. """
>     def __call__(self):
>         from zope.app.zapi import absoluteURL, getUtility
>         from CS.Homefolder.interfaces import ICSHomeFolderManager
>         hfm = getUtility(ICSHomeFolderManager)
>         req = self.request
>         URL = absoluteURL(hfm.getHomeFolder(req.principal.id), req)
>         req.response.redirect(URL)
> 
> 
> Works perfect. :-)
> 
> Florian
> 
> Am Samstag, 30. April 2005 18:09 schrieb Garrett Smith:
>> Looking at the code, I don't see an easy way to do what you want to
>> do. The menuItem directive doesn't give you any hooks. It would be
>> nice if it supported a class attribute where you could specify your
>> own browser menu item class (or mixin) like the page directive.
>> 
>> If you're desparate enough, you can always create your own directive
>> to register a menu item with an alternative browser menu item class.
>> That class would dynamically provide the 'action' attribute as a
>> property value, evaluating whatever path expression it got in the
>> ZCML. If you want to go down that road, just copy/paste the existing
>> code, substituting YourBrowserMenuItem for BrowserMenuItem for the
>> registration code in z/a/publisher/browser/menumeta.py (line 165).
>> 
>> Sorry, I know this is a pain, but the alternative would be to submit
>> a feature request and wait (probably a long time :)
>> 
>>  -- Garrett
>> 
>> Florian Lindner wrote:
>>> Am Donnerstag, 28. April 2005 21:45 schrieb Garrett Smith:
>>>> I think you want this:
>>>> 
>>>>   principal/++adapter++hf/@@absolute_url
>>>> 
>>>> Personally, I don't care for the shortcut syntax -- it's not clear
>>>> what's going on (at all). It also doesn't appear to support what
>>>> you're trying to do.
>>> 
>>> Sorry, I need to come back to you.
>>> The syntax above works perfect in ZPT templates but I can not make
>>> it working in menuItem action="..." the string I put in the action
>>> attribute is simply concatenated to the URL and not interpreted.
>>> 
>>> Thanks,
>>> 
>>> Florian
>>> 
>>>> Florian Lindner wrote:
>>>>> Am Donnerstag, 28. April 2005 16:43 schrieb Garrett Smith:
>>>>>> I dont know whether action is evaluated or just passed through.
>>>>>> But I use the notation: 
>>>>>> 
>>>>>>   foo/++adapter++myadapter/bar
>>>>>> 
>>>>>> for path adapters. There might be a short-cut syntax, but I don't
>>>>>> recall what it is.
>>>>> 
>>>>> I've found at that the problem is another one:
>>>>> 
>>>>> Iterating of the keys of the object works:
>>>>> 
>>>>>         <div tal:repeat="itm request/principal/hf:keys">
>>>>>             <span tal:replace="itm">test</span>
>>>>>         </div>
>>>>> 
>>>>> hf returns a object derived from IContainer for the Interface and
>>>>> BTreeContainer for the Implementation.
>>>>> 
>>>>> But I want the URL of the object hf returns. Everything I tried
>>>>> with absolute_url does not work. Of course I can add a method
>>>>> which returns zapi.absoluteURL(self, self.context) to the object
>>>>> but I'm sure there a better way. How to get the URL of the
>>>>> object... 
>>>>> 
>>>>> Thx,
>>>>> 
>>>>> Florian
>>>>> 
>>>>>> Florian Lindner wrote:
>>>>>>> Hello,
>>>>>>> I've a a IPathAdapter:
>>>>>>> 
>>>>>>>   <adapter
>>>>>>>       for="zope.security.interfaces.IPrincipal"
>>>>>>>       provides="zope.app.traversing.interfaces.IPathAdapter"
>>>>>>>       factory=".homefolder.getHomeFolder"
>>>>>>>       name="hf" />
>>>>>>> 
>>>>>>> (from Stephans HomeFolderManager)
>>>>>>> 
>>>>>>> Now I want a menu item that is pointing to that homefolder. How
>>>>>>> can I do that? 
>>>>>>> 
>>>>>>>     <menuItem
>>>>>>>         action="principal/hf"
>>>>>>> 	[...]" />
>>>>>>> 
>>>>>>> Does not work?
>>>>>>> 
>>>>>>> Thx,
>>>>>>> 
>>>>>>> Florian
>>>>>>> _______________________________________________
>>>>>>> Zope3-users mailing list
>>>>>>> Zope3-users at zope.org
>>>>>>> http://mail.zope.org/mailman/listinfo/zope3-users



More information about the Zope3-users mailing list