[Zope] Newbie question: ZCatalog 'summary' meta-data
Tres Seaver
tseaver@palladion.com
Tue, 18 Apr 2000 18:32:21 -0500
Curtis Matthews <cmatthews@cpcus.com> wrote:
> Please find it in your heart to enlighten a newbie. :)
>
> I've been able to find a lot of helpful documentation about how to use
> ZCatalogs and search interfaces, but one thing that has eluded me is the
> 'summary' meta-data feature. All I've been able to find out about this is
> it's supposed to store the first few hundred characters of a text document
> so that they can be displayed on a results report.
>
> I now have a catalog of about 100+ DTML Documents, and every time I search
> it, the "summary" column of the results report is empty. I'm confused. I
> assumed ZCatalog builds this summary automatically...does it? If not, what
> extra stuff do I have to do to make it so?
>
> Any troubleshooting suggestions would be appreciated.
The catalog has index for 'summary', because CatalogAware objects expose a
'summary' attribute (a method, actually) which performs as you describe.
Unfortunately, DTMLDocument is *not* dervied from CatalogAware, and so has no
such method. This gap accounts for other infelicitous (non)interaction between
DTMLDocuments and ZCatalogs: DTMLDocuments are not automagically added/removed
from the catalog when they are created/deleted, for instance.
A workaround is to add a PythonMethod or ExternalMethod named 'summary' as a
peer of your Catalog, defined so (assuming an EM):
def summary( self, num=200 ):
"""Return a summary of the string form of the object."""
text=str( self )
n=min(num, len(text))
return text[:n]
Note that the "string form" of a DTML document is the unrendered source, which
may not be very useful to look at -- most will start off with '<dtml-var
standard_html_header>...' and go downhill from there. You can, of course, tweak
the summary code to return any property, or even a concatenated set of
properties (like PrincipiaSearchSource does).
Tres.
--
=========================================================
Tres Seaver tseaver@digicool.com tseaver@palladion.com