zope portal catalog - the difference between metadata and index contents

I always forget this - when doing a zope catalog query, you are searching the index contents not the metadata contents. If there is a field in your metadata that you want to be able to use as a variable in a portal catlog query, you need to add the field as an index and then reindex the catalog (or just the new field within the catalog).

For example I was generating some custom tabs for the contents of a particular folder within a plone site and I wanted the catalog query to exclude any items with the “exclude_from_nav” field set to True. It wasn’t listening to me. The solution was to go to portal_catalog -> indexes and add a new field index ‘exclude_from_nav’ (i.e the field name needs to match the meta data field name). Tick the box next to the new ‘exclude_from_nav’ and hit the reindex button. Now the catalog is aware of this field and which objects in the zodb are set to true and false.

4 Responses to “zope portal catalog - the difference between metadata and index contents”

  1. Eric Says:

    Where does one set ‘exclude_from_nav’ to true?

  2. Rick Says:

    exclude_from_nav is a field within the metatdata of a plone page - it is set using the check box Exclude from navigation on the properties tab when editing a page or other plone content type

  3. Eric Says:

    Thank you, Rick.

    Can you provide an example on how to use this in my AT Class file (filesystem based product)?

    Thanks much.

    Eric

  4. Rick Says:

    If your AT class file inherits from another plone content type then you do not need to add this field, as it will be inherited by your content type. I’ve never had to add it in - I just did a quick search and see that it is an Accessor in ATContentTypes/content/base.py - it is actually returning a value from a var called excludeFromNav - where ever that is coming from

Leave a Reply