Andy Gimblett wrote:
Hi there,
One of my colleagues has just come to me with a ZCatalog problem which I don't know how to solve. Fundamentally, we want to be able to catalogue the site so that for files with a certain name ("content_html"), the ZCatalog entries should link to the directory containing the file, not the file itself.
Here's the situation:
* The site has just one "index_html" at the site root, which contains a <dtml-var content_html> tag. * Every directory in the site contains a "content_html" DTML Method which contains that directory's desired contents. * So, a call to http://site/foo/ involves acquiring index_html from the site root directory, and then inserting foo's content_html into that.
The problem is that when cataloging the site, we get lots of links like /foo/content_html, /bar/content_html, etc., when what we really want are /foo/, /bar/, etc., or maybe even /foo/index_html, /bar/index_html - if you see what I mean. :-)
Unfortunately neither my colleague nor myself knows how to do this, or even if it's possible.
Thanks in advance,
Andy
The way to solve this is by creating a script at the root of your Zope installation that returns the path of the object being indexed. For objects that are named "content_html" it will return the path of the parent object (the folder) instead of the direct path. You would then add a metadata element to your catalog with the name of this script. Here is a tested Python script that returns an adjusted path for any given object: import string if context.getId() == 'content_html': return string.join(context.aq_parent.getPhysicalPath(),'/') + '/' else: return string.join(context.getPhysicalPath(),'/') Let's say you named this script "my_path". Add "my_path" as a metadata element to your Catalog, update it and voila, the adjusted path is saved for each object. You could then use the "my_path" value to create the link to the object when the Catalog is queried. hth -- | Casey Duncan | Kaivo, Inc. | cduncan@kaivo.com `------------------>