[Zope] ZCatalog and custom Product

Milos Prudek prudek at bvx.cz
Wed Apr 20 04:11:23 EDT 2005


Hi,

I need to convert a ZClass cataloged in multiple ZCatalogs into a 
Product. I know how to create a Product. But I have trouble 
understanding how to create a proper ZCatalog and manage it in a Product.

When I change my ZClass instance, it reindexes itself in multiple 
ZCatalogs. I have the following DTML method "edit" in my ZClass (stored 
in ZODB) that takes care of this:

<dtml-call "manage_editCataloger('Catalog_A')">
<dtml-call reindex_object>
<dtml-call "manage_editCataloger('Catalog_B')">
<dtml-call reindex_object>

How should this be programmed in Products?

- Should I first create a ZCatalog instance in ZODB, and then bind this 
instance to my Product? That would make my Product not self-contained.

- or should the Product rather create ZCatalog instance during its 
initialization? That would mean that upon Zope restart, ZCatalog 
instance would be removed and re-created and all Product instances would 
have to be recataloged.

In my new Product (that is to replace my ZClass), I put this line:

from Products.ZCatalog.ZCatalog import ZCatalog

and I added ZCatalog to the list of subclassed classes:

class ArtBase(ZCatalog, ObjectManager, SimpleItem, PropertyManager, 
JMZPTMacros):

but I have no idea what to do next. In this mailing list's archive, 
Chris Withers wrote that ZCatalog should be an attribute of a product's 
instance so that I can open the ZCatalog management interface by calling 
"my_prod_instance/catalog_name/manage". I understand that, but I have no 
idea how to achieve it.

Should I add a line to my class __init__ ? Something like:

   def __init__(self,id,title=''):
     """Contructor method to initialize the properties of our class"""
     #Create and initilize the class attributes
     self.id=id
     self.title=title
     self.catalog=manage_addZCatalog(id="catalog", title="title")

but the above looks fishy because I would have an isolated catalog for 
each new instance of my class...

To support manage_editCataloger and reindex_object, do I need to import 
both ZCatalog from Products.ZCatalog and CatalogAware from 
Products.ZCatalog.CatalogAwareness ?

-- 
Milos Prudek


More information about the Zope mailing list