[Zope] AccessRule rewriting for queries

Casey Duncan cduncan@kaivo.com
Thu, 15 Mar 2001 08:16:23 -0700


Joel Burton wrote:
> 
> Part of my criteria for a site is to eliminate ugly URLs where
> possible. So, instead of
> 
>   http://foo/authors/search?name=plath
> 
> I'd like
> 
>   http://foo/authors/plath
> 
> I've handled this (mishandled this?) with a SiteAccess scipt in the
> authors folder:
> 
> <dtml-comment>   Handle author searches like /authors/plath
>                  without ugly URLs like /author/search?name=plath
> 
>                  Look at every request in this folder:
>                  if it's not for an existing file, then mangle
>                  it so that it becomes a request for the detail
>                  page, and set 'author' to the rest of the path
> </dtml-comment>
> 
> <dtml-let addon="REQUEST.path[-1]">
>   <dtml-if "addon not in objectIds() and addon[0:6] != 'manage'">
>     <dtml-call "REQUEST.path.pop()">
>     <dtml-call "REQUEST.path.append('detail')">
>     <dtml-call "REQUEST.set('author',addon)">
>   </dtml-if>
> </dtml-let>
> 
> (if there is a request for something that isn't actually in this folder,
> and isn't a manage request, mungle it)
> 
> Two questions:
> 
> 1) is this terribly evil? is my site going to catch on fire one day
> because of this?
> 
> 2) my breadcrumbs no longer work. I'm using one of the standard breadcrumb
> tips that runs off PARENTS, and it only shows 'Home > Authors', not
> 'Home > Authors > Plath' (which makes sense--Plath isn't on the PARENTS
> list.)
> 
> However, if I add the requested author name to PARENTS (via append),
> everything goes haywire -- I can no longer see the ordinary stuff, like
> standard_html_header
> 
> I could have a different breadcrumb routine in this folder, but that seems
> icky and hard to maintain. I'd rather figure out some way of getting the
> regular breadcrumb method to work properly here.
> 
> Any ideas?
> 
> As always, thanks for any help,
> 
> --
> Joel Burton   <jburton@scw.org>
> Director of Information Systems, Support Center of Washington
> 

Another less code intensive way to do this would be to make search a
Python script instead of a folder. If you go to the bindings tab of the
script, you will notice an item called "Subpath". This lets you pass the
portion of the URL after the script id as a list argument to the script.
By default, the subpath information is passed in as the
"traverse_subpath" variable.

This python snippit could get you started:

if traverse_subpath:
	author = traverse_subpath[0]
	...Search Code Goes Here...

-- 
| Casey Duncan
| Kaivo, Inc.
| cduncan@kaivo.com
`------------------>